我有一个存储switch语句的变量
$com = ' switch ($_) { 1 {"It is one."} 2 {"It is two."} 3 {"It is three."} 4 {"It is four."} } '
我正在尝试用管道输入数字以运行switch语句比如:第一个月
5kgi1eie1#
您的选项包括:
scriptblock
function
process
$com = { process { switch ($_) { 1 { "one." } 2 { "two." } 3 { "three." } } } } function thing { process { switch ($_) { 1 { "one." } 2 { "two." } 3 { "three." } } } } 1..3 | & $com 1..3 | thing
1.一个filter,功能完全相同:
filter
filter thing { switch ($_) { 1 { "one." } 2 { "two." } 3 { "three." } } } 1..3 | thing
1.使用ScriptBlock.Create method(这需要在字符串表达式中使用process块):
ScriptBlock.Create
$com = ' process { switch ($_) { 1 { "one." } 2 { "two." } 3 { "three." } } } ' 1..3 | & ([scriptblock]::Create($com))
1.使用ScriptBlock.InvokeWithContext method和自动变量$input,此技术不流,并且还需要外部scriptblock才能工作,它只是为了展示,应该作为一个选项丢弃:
ScriptBlock.InvokeWithContext
$input
$com = ' switch ($_) { 1 { "one." } 2 { "two." } 3 { "three." } } ' 1..3 | & { [scriptblock]::Create($com).InvokeWithContext($null, [psvariable]::new('_', $input)) }
1.使用Invoke-Expression,还需要一个外部scriptblock和一个process块(应该放弃-在上面显示的所有技术中,这是最差的一个,字符串表达式是针对通过管道的每个项进行计算的):
Invoke-Expression
$com = ' switch ($_) { 1 { "one." } 2 { "two." } 3 { "three." } } ' 1..3 | & { process { Invoke-Expression $com } }
1条答案
按热度按时间5kgi1eie1#
您的选项包括:
scriptblock
或function
与process
数据块:1.一个
filter
,功能完全相同:1.使用
ScriptBlock.Create
method(这需要在字符串表达式中使用process
块):1.使用
ScriptBlock.InvokeWithContext
method和自动变量$input
,此技术不流,并且还需要外部scriptblock
才能工作,它只是为了展示,应该作为一个选项丢弃:1.使用
Invoke-Expression
,还需要一个外部scriptblock
和一个process
块(应该放弃-在上面显示的所有技术中,这是最差的一个,字符串表达式是针对通过管道的每个项进行计算的):