Powershell:在Switch语句中标识变量的名称

时间:2018-07-05 15:50:37

标签: powershell switch-statement

我有以下代码段:

$a = '1'
$b = ''

Switch ($a, $b) {
    {[string]::IsNullOrEmpty($_)} {
        Write-Host ("{0}: {1} is null." -f (Get-Date -Format s), $_)

        break
    }
    default {
        Write-Host ("{0}: {1} is not null." -f (Get-Date -Format s), $_)
    }
}

此Switch语句标识未分配任何值的变量。当我运行它时,我希望能够告诉用户(或日志文件)哪个变量为空,这可能吗?

生产代码具有更多变量,并且通过调用各种AP​​I在整个脚本中对其进行定义。我宁愿避免使用一堆If / else语句。

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以将变量 name 传递给switch语句,而不是将变量 value 传递给switch语句,并使用Get-Variable -Value来获取守卫的值。看起来像

$a = '1'
$b = ''
$c = '3'
$d = '4'

Switch ('a', 'b', 'c', 'd') {
    {[string]::IsNullOrEmpty((Get-Variable -Value $_))} {
        Write-Host ("{0}: {1} is null." -f (Get-Date -Format s), $_)

        continue
    }
    default {
        Write-Host ("{0}: {1} is not null." -f (Get-Date -Format s), $_)
    }
}

此外-如果您希望switch语句遍历所有变量,则需要使用continue而不是break。我已在示例中进行了此更改。