你正在重复造轮子。普通的PowerShell脚本参数以-
开头,例如:script.ps1 -server http://devserver
然后在param
部分处理它们(请注意,这必须从您脚本中的第一行非注释行开始)。
您还可以为参数分配默认值,如果参数不可用则从控制台读取它们或停止脚本执行:
param (
[string]$server = "http://defaultserver",
[Parameter(Mandatory=$true)][string]$username,
[string]$password = $( Read-Host "Input password, please" )
)
在脚本中,您可以简单地
write-output $server
由于所有参数都成为脚本范围内可用的变量,因此可以使用默认值初始化变量。
在此示例中,如果在调用脚本时未传递$server
参数,则$server
将获取默认值,如果省略-username
参数,则脚本停止运行,并提示输入终端密码,如果省略-password
参数,则会要求终端输入。
更新:
您可能还想将“标志”(布尔型的真/假参数)传递给PowerShell脚本。例如,当不使用force
选项时,您的脚本可以接受一个“force”标志,脚本以更谨慎的方式运行。
这种情况下,关键字是[switch]
参数类型:
param (
[string]$server = "http://defaultserver",
[string]$password = $( Read-Host "Input password, please" ),
[switch]$force = $false
)
在脚本中,您可以像这样使用它:
if ($force) {
//deletes a file or does something "bad"
}
现在,调用脚本时,您需要这样设置开关/标记参数:
.\yourscript.ps1 -server "http://otherserver" -force
如果您明确希望声明该标志未设置,则有一种特殊的语法可以使用。
.\yourscript.ps1 -server "http://otherserver" -force:$false
以下是与 PowerShell 5.0 相关的微软文档链接(也提供版本 3.0 和 4.0 的文档链接):
[Parameter(Mandatory=$true)][string]$username
,取代了[string]$username = $(throw "-username is required.")
。这两种技术的差异可以在此链接中找到更多信息:http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/22/use-powershell-to-make-mandatory-parameters.aspx。 - v.karbovnichy