Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell:标识Switch语句中变量的名称_Powershell_Switch Statement - Fatal编程技术网

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

Powershell:标识Switch语句中变量的名称,powershell,switch-statement,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

我有以下代码片段:

$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), $_)
    }
}
此开关语句标识没有任何赋值的变量。当我运行它时,我希望能够告诉用户(或日志文件)哪个变量是空的,这可能吗

生产代码有更多的变量,它们通过调用各种API在整个脚本中定义。我宁愿避免一大堆If/else语句


谢谢。

您可以传递变量名,而不是将变量值传递给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
。我在我的示例中做了这一更改。

您可以传递变量名,而不是将变量值传递给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
。我在示例中做了这个更改。

什么用例?看起来您正在尝试重新创建参数绑定和验证。我将通过使用自定义对象来处理此问题。一个属性是要向用户显示的消息。另一个是价值。然后将它们全部循环并进行测试。你可以用哈希表做类似的事情,这就是我倾向于做的。我在想我可以做一些类似的事情:$a=@{name=a;value='1'}。因为有些变量实际上是对象数组,所以以后很难将它们取出,但也许没关系。什么用例?看起来您正在尝试重新创建参数绑定和验证。我将通过使用自定义对象来处理此问题。一个属性是要向用户显示的消息。另一个是价值。然后将它们全部循环并进行测试。你可以用哈希表做类似的事情,这就是我倾向于做的。我在想我可以做一些类似的事情:$a=@{name=a;value='1'}。由于一些变量实际上是对象数组,因此以后很难将它们取出,但也许这没关系。填充哈希表似乎可行,但这更简单。谢谢顺便说一句,我想当我发现一个空变量时,我更喜欢打破开关,这样用户就可以修复它。由于脚本的性质,如果一个为空,则其他脚本很可能为空,修复第一个脚本将修复其余脚本。填充哈希表似乎可行,但这更简单。谢谢顺便说一句,我想当我发现一个空变量时,我更喜欢打破开关,这样用户就可以修复它。由于脚本的性质,如果其中一个为空,则其他脚本可能为空,修复第一个脚本将修复其余脚本。