如何在 Powershell 中调用 Scriptblock 作为函数参数
How to call a Scriptblock as a function parameter in Powershell
我想要一个函数来 运行 不同的 ScriptBlocks。所以,我需要使用我的 Scriptblock 作为函数的参数。没用。
例如。此函数 returns 将 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
如果你想要一个函数运行一个脚本块,你需要实际调用或调用那个脚本块,即
function Run_Scriptblock($SB) {
$SB.Invoke()
}
或
function Run_Scriptblock($SB) {
& $SB
}
否则该函数将return 字符串形式的脚本块定义。不需要 return
关键字,因为 PowerShell 默认运行 return all non-captured output。
函数会这样调用:
Run_Scriptblock {systeminfo}
作为旁注,我建议您考虑按照 PowerShell 约定命名您的函数(<Verb>-<Noun>
和 approved verb),例如
function Invoke-Scriptblock($SB) {
...
}
我想要一个函数来 运行 不同的 ScriptBlocks。所以,我需要使用我的 Scriptblock 作为函数的参数。没用。
例如。此函数 returns 将 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
如果你想要一个函数运行一个脚本块,你需要实际调用或调用那个脚本块,即
function Run_Scriptblock($SB) {
$SB.Invoke()
}
或
function Run_Scriptblock($SB) {
& $SB
}
否则该函数将return 字符串形式的脚本块定义。不需要 return
关键字,因为 PowerShell 默认运行 return all non-captured output。
函数会这样调用:
Run_Scriptblock {systeminfo}
作为旁注,我建议您考虑按照 PowerShell 约定命名您的函数(<Verb>-<Noun>
和 approved verb),例如
function Invoke-Scriptblock($SB) {
...
}