Powershell验证命令行参数的参数

时间:2018-04-26 19:07:50

标签: powershell command-line

我不明白这一点。如果我将param放在脚本的顶部,然后使用命令行运行脚本并指定用户名,则将用户名分配给$UserName

Param([string]$UserName)

如果我将它包装在一个函数中,则从命令行运行它:

E.g: ./Script.ps1 -UserName BLAH

未分配给$UserName

Function MainFunction
{
  Param([string]$UserName)
}
#Call Mainfunction
MainFunction;

为什么?

2 个答案:

答案 0 :(得分:2)

您的代码将参数放在函数的范围内。当您运行Script.ps1 -UserName BLAH时,此参数将在脚本范围内传递。

如果要向下传递变量,则需要两个参数块,一个用于脚本,另一个用于函数。然后将脚本的UserName作为函数的参数传递给函数。

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 来使用函数内部的脚本作用域中的UserName来使用该作用域中的变量。

{{1}}

答案 1 :(得分:0)

<强>解决方案:

Function MainFunction
{
  Param([string]$UserName)
  Write-Host $UserName
}
#Call Mainfunction
MainFunction  -UserName $args[0]

来自CMD的电话:

powershell -File "Script.ps1" "Chuck Norris"