如何使用powershell运行空间正确地将参数传递给scriptblock?

时间:2017-07-05 19:05:23

标签: powershell runspace

在使用运行空间时,我想从外部将可预测的参数传递给我的scriptblock。为了在不使用 $ args 的情况下执行此操作(以避免使代码更不可读),我将我的参数存储在名为 $ var 的变量中,并将变量添加到RunspacePool的InitialSessionState。为此,我使用了Add

System.Management.Automation.Runspaces.InitialSessionState.Create().Variables方法

这适用于我的目的,但我也注意到PowerShell.AddParameter的{​​{1}}方法,它会在创建时为每个PowerShell进程添加我的参数。

最后我可以使用[PowerShell]::Create() PowerShell.AddArgument,并使用AddParameter块。这可行,但是,每个参数将按顺序传递,并且最终工作以及 $ args

所以我的问题是为了我定义的目的,将参数\参数\变量传递到一个脚本块的推荐方法是什么?一个在另一个上有性能优势吗?你可以扩展一个用户的目的吗?

1 个答案:

答案 0 :(得分:1)

您可以在脚本块定义中使用cmdlet绑定。

$ScriptBlock = {
    Param (
        [int]$NumberofHours,
        [string]$ClientName
    )
    $LogPath = 'd:\Program Files\Exchange\Logging\RPC Client Access\*.LOG'
    $today = (Get-Date).AddHours($NumberofHours)
}

然后在执行脚本块时定义调用这些参数。

Invoke-Command -ComputerName $servers -ScriptBlock $ScriptBlock -ArgumentList -1,$cn -ErrorAction SilentlyContinue