传递Cmdlet名称和参数的Invoke-Command包装函数

时间:2019-03-18 06:53:19

标签: powershell powershell-remoting invoke-command

我正在构建一个Azure Runbook辅助函数,该函数最终将在Hybrid Runbook Worker上执行。

为了尽可能地概括我的代码,我想到了一个功能,该功能可以动态地构建一个脚本块,该脚本块定义Exchange Cmdlet名称和参数。发布此线程之前我尝试的步骤。

function Invoke-BSExchangeCommand{
[CmdletBinding()]
param (
    [Parameter(Mandatory = $true)]
    [string]
    $CmdletName,
    [Parameter(Mandatory = $false)]
    [hashtable]
    $ArgumentList,
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [System.Management.Automation.Runspaces.PSSession]
    $Session
)

$scriptBlock = {
    param ($invokeParams)
    # Get-DistributionGroup @invokeParams
    # $_::$CmdletName.Invoke($invokeParams)
    $cmd = Get-Command -Name $CmdletName
    & $cmd @invokeParams
}

$params = @{
    Session      = $Session
    ArgumentList = $ArgumentList
    ScriptBlock  = $scriptBlock
}

Invoke-Command @params
}

编辑:我发现“ Get-Command” cmdlet在Exchange终结点上公开/不受限制。

我遇到的错误是一个通用错误,并给出了许多不同(不相关)的Google搜索结果:在数据部分中不允许使用Begin语句块,Process语句块或parameter语句 < / p>

编辑:我要改进的起点是具有定义的Cmdlet名称的此脚本块有效:

$scriptBlock = {
    param ($invokeParams)
    Get-DistributionGroup @invokeParams
}

谢谢!

-安德斯

0 个答案:

没有答案