Aar*_*ann 464 powershell command-line-arguments
处理命令行参数的"最佳"方法是什么?
似乎对"最佳"方式有几个答案,因此我坚持如何处理如下简单的事情:
script.ps1 /n name /d domain
Run Code Online (Sandbox Code Playgroud)
和
script.ps1 /d domain /n name.
Run Code Online (Sandbox Code Playgroud)
有没有一个可以更好地处理这个问题的插件?我知道我在这里重新发明轮子.
显然我已经不是很漂亮而且肯定不是"最好的",但它确实有效..而且它是UGLY.
for ( $i = 0; $i -lt $args.count; $i++ ) {
if ($args[ $i ] -eq "/n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "-n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "/d"){ $strDomain=$args[ $i+1 ]}
if ($args[ $i ] -eq "-d"){ $strDomain=$args[ $i+1 ]}
}
Write-Host $strName
Write-Host $strDomain
Run Code Online (Sandbox Code Playgroud)
nai*_*sts 863
你正在重新发明轮子.普通PowerShell脚本具有参数开始-,如script.ps1 -server http://devserver
然后param在文件开头的部分处理它们.
您还可以为参数指定默认值,如果不可用则从控制台读取它们或停止脚本执行:
param (
[string]$server = "http://defaultserver",
[Parameter(Mandatory=$true)][string]$username,
[string]$password = $( Read-Host "Input password, please" )
)
Run Code Online (Sandbox Code Playgroud)
你可以简单地在脚本里面
write-output $server
Run Code Online (Sandbox Code Playgroud)
因为所有参数都成为脚本范围中可用的变量.
在此示例中,$server如果在没有脚本的情况下调用脚本,则获取默认值,如果省略-username参数则脚本将停止,并且如果省略则请求终端输入-password.
更新:您可能还希望将"flag"(布尔值true/false参数)传递给PowerShell脚本.例如,您的脚本可能会接受"强制",其中脚本在不使用强制时以更仔细的方式运行.
该关键字是[switch]参数类型:
param (
[string]$server = "http://defaultserver",
[string]$password = $( Read-Host "Input password, please" ),
[switch]$force = $false
)
Run Code Online (Sandbox Code Playgroud)
在脚本内部,您可以像这样使用它:
if ($force) {
//deletes a file or does something "bad"
}
Run Code Online (Sandbox Code Playgroud)
现在,在调用脚本时,您需要设置switch/flag参数,如下所示:
.\yourscript.ps1 -server "http://otherserver" -force
Run Code Online (Sandbox Code Playgroud)
如果您明确要声明未设置该标志,则会有一种特殊语法
.\yourscript.ps1 -server "http://otherserver" -force:$false
Run Code Online (Sandbox Code Playgroud)
指向相关Microsoft文档的链接(适用于PowerShell 5.0;链接中也提供了版本3.0和4.0):
| 归档时间: |
|
| 查看次数: |
644965 次 |
| 最近记录: |