【发布时间】:2017-02-14 13:43:26
【问题描述】:
我有一个 Powershell 函数,我试图允许用户通过键入单词“add”或“remove”后跟以空格分隔的项目列表来从列表中添加或删除项目。我在下面有一个示例(稍作编辑,因此您可以将代码放入 powershell 提示符以“实时”测试它)。
$Script:ServerList = @("Server01","Server02","Server03")
Function EditServerList (){
$Script:ServerList = $Script:ServerList |Sort -Unique
Write-host -ForegroundColor Green $Script:ServerList
$Inputs = $args
If ($Inputs[0] -eq "start"){
$Edits = Read-Host "Enter `"add`" or `"remove`" followed by a space-delimited list of server names"
#"# EditServerList $Edits
# EditServerList $Edits.split(' ')
EditServerList ($Edits.split(' ') |Where {$_ -NotLike "add","remove"})
EditServerList start
} Elseif ($Inputs[0] -eq "add"){
$Script:ServerList += $Inputs |where {$_ -NotLike $Inputs[0]}
EditServerList start
} Elseif ($Inputs[0] -eq "remove"){
$Script:ServerList = $Script:ServerList |Where {$_ -NotLike ($Inputs |Where {$_ -Notlike $Inputs[0]})}
EditServerList start
} Else {
Write-Host -ForegroundColor Red "ERROR!"
EditServerList start
}
}
EditServerList start
如您所见,该函数接受参数列表。第一个参数在 If/Then 语句中求值,然后其余参数被视为要从列表中添加或删除的项目。
我已经尝试了几种不同的方法,您可以在第一次 IF 评估中看到这些方法已被注释掉。
我有两个问题。
- 当我输入“add Server05 Server06”(不带引号)之类的内容时,它可以正常工作,但它也会包含“add”一词。
- 当我输入“删除 Server02 Server03”(不带引号)时,它根本不会编辑数组。
谁能指出我哪里出错了,或者提出一个更好的方法来解决这个问题?
【问题讨论】:
标签: powershell parameters parameter-passing destructuring