设置存储在数组中的变量的值?

时间:2019-06-11 15:06:07

标签: powershell

我有一些存储在数组中的变量。是否可以对它们进行空检查,如果为空,则使用ForEach循环将值更改为“无”?

$a = ""
$b = ""
$c = "something"

$array = @($a, $b, $c)

ForEach($element in $array){
   If(!$element){
     Set-Variable -Name $element -Value "None"
}
}

1 个答案:

答案 0 :(得分:0)

以下代码将重新创建$array。注意空字符串""$null

的区别
$a = $null
$b = ""
$c = "something"

$array = @($a, $b, $c)

$array = ForEach($element in $array){
    If($element -eq $null){
        "none"
    }else{
        $element
    }
}
$array

如果您想同时涵盖$null"",则可以按照LotPings指出的[string]::IsNullOrEmpty($element)进行检查:

if([string]::IsNullOrEmpty($element)){
    "none"
}else{
    $element
}

但是,如果要处理嵌套数组,事情会变得有些复杂,因为powershell难以返回单元素数组(这是一篇不错的小文章:Powershell Functions do not return single element arrays
如文章所述,您需要在单元素数组前加一个逗号。看起来像这样:

$a = @()
$b = @()
$c = @("something")

$array = @($a,$b,$c)

$array = ForEach ($element in $array){ 
    if ($element.count -eq 0){
         ,@("none")
    }else{
         ,$element
    }
}
$array
$array | ForEach-Object {$_.gettype()}