Установить значение переменной, которая хранится в массиве? - PullRequest
1 голос
/ 11 июня 2019

У меня есть несколько переменных, которые я сохранил в массиве.Можно ли проверить их на нуль, и если это ноль, изменить значение на «Нет», используя цикл ForEach?

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

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

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

1 Ответ

0 голосов
/ 11 июня 2019

Следующий код воссоздает $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, так и "", вы можете проверить это с помощью [string]::IsNullOrEmpty($element), как указали LotPings:

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

Однако, если вы хотите обработать вложенные массивы, все немного усложняется, поскольку у powershell есть проблемы с возвратом одноэлементных массивов (вот небольшая хорошая статья об этом: Функции Powershell не делаютвозвращаем одноэлементные массивы )
Как говорится в статье, вам нужна дополнительная запятая напротив массива из одного элемента.Это будет выглядеть так:

$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()}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...