我可以管道到存储在变量中的switch语句吗?



我有一个存储switch语句的变量

$com = '
switch ($_)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
'

我正在尝试输入数字以运行switch语句

类似:

1 | iex($com)

您的选择是:

  1. scriptblockfunctionprocess阻塞:
$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 thing {
switch ($_) {
1 { "one."   }
2 { "two."   }
3 { "three." }
}
}
1..3 | thing
  1. 使用ScriptBlock.Create方法(这将需要在字符串表达式中使用process块):
$com = '
process {
switch ($_) {
1 { "one."   }
2 { "two."   }
3 { "three." }
}
}
'
1..3 | & ([scriptblock]::Create($com))
  1. 使用ScriptBlock.InvokeWithContext方法和自动变量$input,该技术不流式传输并且还需要一个外部scriptblock工作,它只是为了展示,应该被丢弃为一个选项:
$com = '
switch ($_) {
1 { "one."   }
2 { "two."   }
3 { "three." }
}
'
1..3 | & { [scriptblock]::Create($com).InvokeWithContext($null, [psvariable]::new('_', $input)) }
  1. 使用Invoke-Expression,还需要一个带有process块的外部scriptblock(应该被丢弃-从上面显示的所有技术中,这是最糟糕的一个,字符串表达式正在通过管道对每个项目进行评估):
$com = '
switch ($_) {
1 { "one."   }
2 { "two."   }
3 { "three." }
}
'
1..3 | & { process { Invoke-Expression $com } }

相关内容

  • 没有找到相关文章

最新更新