文字列パラメーターを受け入れるスクリプトがあります。
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 コマンド ラインから 2 回実行すると、1 回目は例外がスローされますが、2 回目はエラーなしで実行されることです。