我有一个存储switch语句的变量
$com = '
switch ($_)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
'
我正在尝试输入数字以运行switch语句
类似:
1 | iex($com)
您的选择是:
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
- 一个
filter
,完全相同的功能:
filter thing {
switch ($_) {
1 { "one." }
2 { "two." }
3 { "three." }
}
}
1..3 | thing
- 使用
ScriptBlock.Create
方法(这将需要在字符串表达式中使用process
块):
$com = '
process {
switch ($_) {
1 { "one." }
2 { "two." }
3 { "three." }
}
}
'
1..3 | & ([scriptblock]::Create($com))
- 使用
ScriptBlock.InvokeWithContext
方法和自动变量$input
,该技术不流式传输并且还需要一个外部scriptblock
工作,它只是为了展示,应该被丢弃为一个选项:
$com = '
switch ($_) {
1 { "one." }
2 { "two." }
3 { "three." }
}
'
1..3 | & { [scriptblock]::Create($com).InvokeWithContext($null, [psvariable]::new('_', $input)) }
- 使用
Invoke-Expression
,还需要一个带有process
块的外部scriptblock
(应该被丢弃-从上面显示的所有技术中,这是最糟糕的一个,字符串表达式正在通过管道对每个项目进行评估):
$com = '
switch ($_) {
1 { "one." }
2 { "two." }
3 { "three." }
}
'
1..3 | & { process { Invoke-Expression $com } }