Я не могу заставить свою функцию работать, используя iex (invoke-expression) с переменными. Что я хочу:
function My-Function {
# code that constructs $command
#$command is an arbitrary string that may contain pipes,
#variables, command line paramaters, switchs, quoted strings, THE LOT!
Execute-My-Command-Exactly-As-Though-I-Had-Typed-It-Here $command
}
Например
function My-Function {
$command = "`$input | select-string hello"
iex $command
}
Делает ли это (после включения моего файла, содержащего указанную выше функцию)
PS C:\> echo "hello" | My-Function
PS C:\>
Но, очевидно, он должен сделать это:
PS C:\> echo "hello" | My-Function
hello
PS C:\>
Более того, в реальной командной строке переменные ДЕЙСТВИТЕЛЬНО подхватываются iex:
PS C:\> $hello = "hello"
PS C:\>
PS C:\> iex "`$hello | select-string hello"
hello
PS C:\>
Единственный обходной путь, который я могу придумать, - это записать функцию в файл, а затем . включите его, затем позвоните. Но это ужасно! Весь смысл хорошего языка сценариев оболочки в том, что он должен быть в состоянии сделать этот метаматериал простым и легким.
РЕШЕНИЕ:
PowerShell не может этого сделать, хотя latkin дает полезный совет.