我不理解这一点。如果我将param放在脚本的顶部,然后使用命令行运行脚本并指定用户名,则将用户名分配给$UserName
Param([string]$UserName)
如果我将其包装在函数中,然后从命令行运行:
例如: ./Script.ps1 -UserName BLAH
它没有被分配给$UserName
Function MainFunction
{
Param([string]$UserName)
}
#Call Mainfunction
MainFunction;
为什么?
您的代码将参数放在函数范围中。运行Script.ps1 -UserName BLAH
时,此参数将在脚本的范围中传递。
如果您想向下传递变量,则需要两个参数块,一个用于脚本,一个用于函数。然后将脚本的用户名传递到函数作为函数的参数。
Param([string]$UserName)
Function MainFunction {
Param([string]$UserName)
}
MainFunction -UserName "Chuck Norris"
另外,您可以使用$script:
使用该范围的变量来使用函数内部脚本范围的用户名。
Param([string]$UserName)
Function MainFunction {
Write-Output "Example use of $script:UserName"
}
MainFunction
解决方案:
Function MainFunction
{
Param([string]$UserName)
Write-Host $UserName
}
#Call Mainfunction
MainFunction -UserName $args[0]
cmd呼叫:
powershell -File "Script.ps1" "Chuck Norris"