- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个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
最佳答案
要预先解决标题的一般性问题,请执行以下操作:
$Args
接收包含整个数组的单个参数,因此您必须使用$Args[0]
来访问它。$Script:ServerList = @("Server01", "Server02", "Server03")
Function EditServerList () {
# Split the arguments, which are all contained in $Args[0],
# into the command (1st token) and the remaining
# elements (as an array).
$Cmd, $Servers = $Args[0]
If ($Cmd -eq "start"){
While ($true) {
Write-host -ForegroundColor Green $Script:ServerList
$Edits = Read-Host "Enter `"add`" or `"remove`" followed by a space-delimited list of server names"
#"# Pass the array of whitespace-separated tokens to the recursive
# invocation to perform the requested edit operation.
EditServerList (-split $Edits)
}
} ElseIf ($Cmd -eq "add") {
# Append the $Servers array to the list, weeding out duplicates and
# keeping the list sorted.
$Script:ServerList = $Script:ServerList + $Servers | Sort-Object -Unique
} ElseIf ($Cmd -eq "remove") {
# Remove all specified $Servers from the list.
# Note that servers that don't exist in the list are quietly ignored.
$Script:ServerList = $Script:ServerList | Where-Object { $_ -notin $Servers }
} Else {
Write-Host -ForegroundColor Red "ERROR!"
}
}
EditServerList start
"start"
分支内使用循环,以避免耗尽堆栈空间,如果继续递归,可能会发生这种情况。 $Cmd, $Servers = $Args[0]
将参数数组(包含在传递的一个且唯一的参数中,请参见下文)分解到第一个 token 中(命令字符串add
或remove
)和其余参数(服务器名称)的数组。$var1, $var2 = <array>
的标量)和其余元素(分配给$var1
的数组)的$var2
技术通常称为解构或拆包。它被记录在 Get-Help about_Assignment Operators
中,尽管没有给它起这样的名字。 -split $Edits
使用-split
运算符的方便的一元形式将用户输入分成由空格分隔的 token 数组,并将该数组传递给递归调用。EditServerList (-split $Edits)
传递一个作为数组的参数-这就是为什么必须使用$Args[0]
来访问它的原因。 -split
运算符(而不是.Split(' ')
)具有忽略开头和结尾空格以及忽略条目之间的多个空格的附加优点。-split
优于[string]
类型的.Split()
方法-请参阅我的this answer。 -notin
中使用包含运算符Where-Object { $_ -notin $Servers }
来接受数组作为RHS,以便从$Servers
所包含的服务器列表中筛选出值。 EditServerList ($Edits.split(' ') |Where {$_ -NotLike "add","remove"})
(a)错误地尝试从参数数组中删除命令名称,即使递归调用需要它也是如此,但(b)实际上却没有这样做,因为-like
的RHS不支持数组。 (顺便说一句:由于您正在查找确切的字符串,因此-eq
本来是更好的选择。)$Inputs[0]
实际上是指整个数组(命令名+服务器名),而不仅仅是它的第一个元素(命令名)。($Inputs[0] -eq "add")
,因为-eq
运算符(如果其LHS是数组)将执行数组过滤,并返回匹配元素的子数组。由于add
是元素中的一个,因此返回了一个1元素子数组,该子数组在 bool(boolean) 上下文中是“真实的”。 where {$_ -NotLike $Inputs[0]}
清除命令名的尝试失败了,并且add
没有删除-您实际上必须与$Inputs[0][0]
(原文如此)进行比较。 Where {$_ -NotLike ($Inputs |Where {$_ -Notlike $Inputs[0]})}
不能将任何内容过滤掉,原因如下:($Inputs |Where {$_ -Notlike $Inputs[0]})
始终返回一个空数组,因为-Notlike
的RHS是一个数组,如上所述,该数组不起作用。 Where {$_ -NotLike @() }
等效,该命令为LHS上的任何标量返回$True
。 Get-Help about_Splatting
)也适用于数组:
> function foo { $Args.Count } # function that outputs the argument count.
> foo @(1, 2) # pass array
1 # single parameter, containing array
> $arr = @(1, 2); foo @arr # splatting: array elements are passed as indiv. args.
2
@
而不是
$
作为中间变量的前缀才能执行飞溅。
关于powershell - 将单个以空格分隔的字符串作为多个参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42227746/
我正在尝试从下拉列表中创建一个多选复选框,并通过 ; 连接所选结果。 我的代码是这样的: var myobject = { ValueA : 'Text A', ValueB : 'T
我有输入,我需要获取值并用 “|” 符号分隔。 我的输入: 输出我需要的: 00:00|00:00|00:00 我的代码是: (而且它不工作) var timesArray = $('table').
我正在尝试将超过 400 万行的列拆分为 4 个新列,问题是我不知道在哪里查看或我应该使用 Google 搜索哪个术语。 (是的,我已经在 Google 和 Stack 中搜索了一个类似的问题,但只在
我有一个很大的 csv 文件,其中充满了用“|”分隔的数字字符,例如: 432452 | 543634 4122442 | 41256512 64523 | 12416 然后我读入数据如下: fs
我有一个程序可以计算多个数字的阶乘。这些数字在 cmd 中作为参数传递: factorial.exe 3 4 5 这将分别计算 3、4 和 5 的阶乘。该程序的早期版本有一个百分比显示堆栈的完整性。我
这个问题已经有答案了: 奥 git _a (6 个回答) 已关闭 9 年前。 我有一个双数“547.123456” 我只想使用这个 double 作为“547.1”,就像“.”后面只有 1 个数字 我
我有一个程序可以计算多个数字的阶乘。这些数字在 cmd 中作为参数传递: factorial.exe 3 4 5 这将分别计算 3、4 和 5 的阶乘。该程序的早期版本有一个百分比显示堆栈的完整性。我
我有一个 ArrayList,其中包含一个 messageId、一个 -、一个用户名。 示例:E123-sam 我想划分 List 的每个元素,使得 - 之前的部分进入一个 ArrayList ,而之
我目前有一个“日期”列作为 pandas 数据框的索引,其格式为: January February .... Year2 January February ... Year3 (它来自 pdf 表格
我正在尝试对我的 .mdb 数据库进行 ODBC 查询。我正在使用 mdbtools 驱动程序。该代码是使用 Eclipse 用 C 语言编写的。唯一的问题是,当我写例如: "SELECT 'last
我需要知道如何将这两个if else 部分分开。 public static int NextBday(int Bdays, int days){ int daysleft = 0;
我想计算我的员工分开但合并在一起的出勤率 My target output 我的代码 SELECT count(employees_id) as numbers FROM attendance WH
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve t
下面是我的代码的一小段摘录,它从 API 添加了一行。总共有很多行。 每一行包含一行数据如 TY8tr,50,34,P,SB, 数据行在数据类型上是一致的。我如何通过 ,'s 拆分数组列表中
我想获取选中的元素并用逗号分隔它们,最后一个元素用“and”分隔 它的显示输出为: 我想删除最后一个元素后面的逗号 (,) 并在它前面添加 'and',例如 Sugar, Milk and Extra
我是 JSON 的新手,但在从已解析的 JSON 对象中提取数据时遇到问题: 我有一个 getstats.php 文件,它回显 mysql 查询的 json 编码结果。以下是 php 文件返回的示例:
我有一个像这样的数字/字符串(我不确定如何将 int 与字符串相互转换) 000000122310200000223340000700012220000011411000000011011271043
标签内的文本
我想尝试一些基本的网络抓取,但遇到了一个问题,因为我习惯了简单的 td-tags,在这种情况下,我有一个网页,其中包含以下预标记和其中的所有文本,这意味着刮掉它有点棘手。 11111111 1111
出于练习目的,我正在开发 TCP 客户端/服务器系统,我想在两者之间发送特定数据。 我已经能够发送字节并让它们显示为字符串。此外,我还可以发送一个特定的字符串(“mb”)并在服务器端弹出一个 Mess
在大量的 unicode 字符中,有一些实际上表示多个字符,例如两个 'f' 字符的 U+FB00 连字 ff。有什么方法可以轻松地将这样的字符转换为多个单个字符?最好是标准 Java API 中可用
我是一名优秀的程序员,十分优秀!