我有一个powershell脚本,在这里我从Jenkins接收元素的名称作为变量:
$IISarray = @("$ENV:Cashier_NAME", "$ENV:Terminal_NAME", "$ENV:Content_Manager_NAME", "$ENV:Kiosk_BO_NAME")
foreach ($string in $IISarray){
"some code goes here"
}
有时随机元素可以为空白。如何添加检查以查看数组中的当前元素是否为空白,将其跳过并转到下一个元素?
答案 0 :(得分:3)
最简单的方法是使用-ne ''
创建排除空条目的数组过滤副本,这要归功于许多PowerShell运算符可以充当过滤器带有数组值的LHS。
注意:我假设您的意思是过滤掉空字符串 ,而不是空白(全空格),因为未定义的环境变量扩展为 empty 字符串。
# Sample array with empty elements.
# Note: No need for @(...)
$IISarray = "foo", "", "bar", "baz", ""
# Note the `-ne ''`, which filters out empty elements.
foreach ($string in $IISarray -ne ''){
$string # echo
}
以上结果:
foo
bar
baz
soundstripe's answer提供了一种Where-Object
解决方案,它可以通过指定任意过滤器脚本块的功能来提供更大的灵活性,但是在此用例中,管道的使用有点繁琐。
幸运的是, PSv4 + 提供了 .Where()
集合方法 ,效果明显更好。
让我用一种可以排除空白(全空白)元素的解决方案进行演示:
# Note the all-whitespace element, which we want to ignore too.
PS> ("foo", " ", "bar", "baz", "").Where({ $_.Trim() })
foo
bar
baz
类似于Where-Object
cmdlet,您将 script块传递给.Where()
方法,其中自动$_
变量表示输入元素,位于手。
.Trim()
方法会修剪字符串中的前导和尾随空格,并返回结果。
因此,全空格字符串将导致 empty 字符串。
在布尔上下文中(如.Where()
方法脚本块隐式是),空字符串的求值为$false
,而任何非空字符串为{{1 }}。
您可以选择显式($true
),甚至可以使用.NET方法($_.Trim() -ne ''
)。
答案 1 :(得分:2)
您可以使用Where-Object
筛选出空值或空值。它非常常用,因此?
是Where-Object
的简写。
$IISarray = @("$ENV:Cashier_NAME", "$ENV:Terminal_NAME", "$ENV:Content_Manager_NAME", "$ENV:Kiosk_BO_NAME")
foreach ($string in ($IISarray | ? {$_})){
"some code goes here"
}
$_
是一个自动变量,代表管道中的每个传入对象。 $null
和空字符串''
在Powershell中都是虚假的,因此只有长度大于0的非空值将被传递到您的for循环中。
答案 2 :(得分:1)
<img src="{{ site.baseurl }}/assets/Animation/run.gif">