如何在 switch case 中使用二进制输出?

问题描述 投票:0回答:1
 $var1 = [byte]0xDB,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0xF4,0x00,0x00,0x00
 $var2 = [byte]0xDB,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x01,0x01,0x00,0x03,0xF1,0x00,0x00,0x00

 $value = Get-ItemProperty -Path $path | Select-Object -ExpandProperty $name -ErrorAction SilentlyContinue

 switch ($value)
       $var1 {act1}
       $var2 {act2}

这个命令

 Get-ItemProperty -Path $path | Select-Object -ExpandProperty $name -ErrorAction SilentlyContinue
输出:

219 1 0 0 16 0 0 0 1 1 0 4 242 0 0 0

但显然 switch 仅在以下形式的输出时才有效:

[字节]0xDB,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x01,0x01,0x00,0x03,0xF1,0x00,0x00,0x00

所以我需要以某种方式转换这些变量之一才能使开关工作,或者可能使用不同的命令

powershell binary registry
1个回答
0
投票

首先,当您将集合传递给

switch
时,每个元素都会单独评估。例如:

switch (1,2,6) { 
    1 {"one"} 
    6 { "six"} 
    default { "default" } }

输出:

one
default
six

其次,匹配通常应该是数字、字符串或某些返回布尔值的表达式,因此您的变量将被转换为字符串。来自about_switch

任何不被识别为数字的未加引号的值都将被视为 细绳。为了避免混淆或意外的字符串转换,您应该 始终引用字符串值。将任何表达式括在括号 () 中, 创建子表达式,以确保计算表达式 正确。

因此,如果您只是将输入转换为字符串,它应该可以工作:

switch ("$value")
{
   $var1 {act1}
   $var2 {act2}
}
© www.soinside.com 2019 - 2024. All rights reserved.