我有一个接受字符串参数的脚本:
script-that-takes-string-param.ps1
param(
[Parameter(Mandatory=$true, HelpMessage="path")]
[string]$path,
)
我有另一个脚本调用第一个脚本:
parent-script.ps1
function CreateDir($dir) {
if (!(Test-Path $dir)) {
mkdir $dir
}
}
function CreatePath($BaseDir, $Environment, $Site, $Domain){
$path = [string]::format("{0}{1}\{2}\{3}", $BaseDir, $Environment, $Site, $Domain)
CreateDir $path
$path
}
$path = CreatePath 'c:\web\' 'qa' 'site1' 'com'
.\script-that-takes-string-param.ps1 -path $path
运行此脚本会引发异常:
"Cannot process argument transformation on parameter 'path'. Cannot convert value to type System.String"
转换参数不起作用:
.\script-that-takes-string-param.ps1 -path [string] $path
并且转换函数结果也不起作用:
$path = [string] CreatePath 'global' 'site1'
但真正奇怪的是,如果我parent-script.ps1
从 PS 命令行运行两次,第一次它会抛出异常,但第二次它执行时没有错误。