Как вызвать Scriptblock как параметр функции в Powershell - PullRequest
0 голосов
/ 04 октября 2019

Я хотел бы иметь функцию для запуска различных ScriptBlock с. Итак, мне нужно использовать мой Scriptblock в качестве параметра функции. Это не работает.

Например. Эта функция возвращает ScriptBlock в виде строки.

function Run_Scriptblock($SB) {
    return $SB
}

Вот результаты моих попыток:

# 1st try
Run_Scriptblock {systeminfo}

>> systeminfo


# 2nd try
Run_Scriptblock systeminfo

>> systeminfo


# 3rd try
Run_Scriptblock [scriptblock]systeminfo

>> [scriptblock]systeminfo


# 4th try
$Command = [scriptblock]{systeminfo}
Run_Scriptblock $Command

>> [scriptblock]systeminfo


# 5th try
[scriptblock]$Command = {systeminfo}
Run_Scriptblock $Command

>> systeminfo

1 Ответ

3 голосов
/ 04 октября 2019

Если вы хотите, чтобы функция выполняла блок скриптов, вам нужно вызвать или вызвать этот блок скриптов, то есть

function Run_Scriptblock($SB) {
    $SB.Invoke()
}

или

function Run_Scriptblock($SB) {
    & $SB
}

В противном случае функция просто вернет определение блока скрипта в виде строки. Ключевое слово return не требуется, поскольку функции PowerShell по умолчанию возвращают все незаписанные выходные данные .

Функция будет вызываться так:

Run_Scriptblock {systeminfo}

В качестве примечания, я бы рекомендовал вам назвать свою функцию в соответствии с соглашениями PowerShell (<Verb>-<Noun> с утвержденным глаголом ), например,

function Invoke-Scriptblock($SB) {
    ...
}
...