我正在构建一个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
}
谢谢!
-安德斯