В основном я пытаюсь заставить работать приведенную ниже функцию «встроенного оператора if» ( кредит здесь )
Function IIf($If, $Then, $Else) {
If ($If -IsNot "Boolean") {$_ = $If}
If ($If) {If ($Then -is "ScriptBlock") {&$Then} Else {$Then}}
Else {If ($Else -is "ScriptBlock") {&$Else} Else {$Else}}
}
При использовании PowerShell v5, похоже, она не работаетменя и называя это как
IIf "some string" {$_.Substring(0, 4)} "no string found :("
, выдает следующую ошибку:
You cannot call a method on a null-valued expression.
At line:1 char:20
+ IIf "some string" {$_.Substring(0, 4)} "no string found :("
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Итак, в качестве более общего вопроса, как сделать $_
доступнымк блоку сценария, переданному в функцию?
Я пытался выполнить этот ответ , но похоже, что он предназначен для передачи его в отдельный процесс, а это не то, что мне нужно.
Обновление: Кажется, проблема в том, что у меня есть функция в модуле, а не непосредственно в сеансе сценария / PS.Обходным путем может быть отказ от его установки в модуль, но я считаю, что модуль более переносим, поэтому я хотел бы найти решение для этого.