PowerShell验证命令行args的参数



我不理解这一点。如果我将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"

最新更新