gpt4 book ai didi

powershell - 如何在 PowerShell 中处理命令行参数

转载 作者:行者123 更新时间:2023-12-02 23:54:22 24 4
gpt4 key购买 nike

处理命令行参数的“最佳”方法是什么?

似乎有几个关于“最佳”方法是什么的答案,因此我陷入了如何处理像这样简单的事情上:

script.ps1 /n name /d domain

并且

script.ps1 /d domain /n name.

有没有一个插件可以更好地处理这个问题?我知道我正在重新发明轮子。

显然我已经拥有的并不漂亮,而且肯定不是“最好的”,但它有效......而且很丑。

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

最佳答案

你正在重新发明轮子。普通 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

更新:您可能还想将“标志”( bool true/false 参数)传递给 PowerShell 脚本。例如,您的脚本可能接受“强制”,当不使用强制时,脚本会以更谨慎的模式运行。

关键字是[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

相关 Microsoft 文档的链接(适用于 PowerShell 5.0;链接中还提供了版本 3.0 和 4.0):

关于powershell - 如何在 PowerShell 中处理命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2157554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com