Функция-оболочка Invoke-Command, которая передает имя и параметры командлета - PullRequest
0 голосов
/ 18 марта 2019

Я создаю вспомогательную функцию Azure Runbook, которая в конечном итоге выполняется на Hybrid Runbook Worker.

Чтобы максимально обобщить мой код, мне пришла в голову идея иметь функцию динамического создания блока сценариев, которыйопределяет имя и параметр командлета Exchange. Это то, что я имею до сих пор - комментарии представляют собой эксперименты, которые раскрывают некоторые шаги, которые я пробовал до публикации этой темы.

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 "доступен / не ограничен в конечной точке Exchange.

Полученная мной ошибка является общей и дает много разных (не относящихся к делу) результатов поиска Google: Блок оператора Begin, Processблок операторов или оператор параметров недопустимы в разделе данных

Редактировать: моя отправная точка, которую я пытаюсь улучшить, заключается в том, что этот блок сценариев с определенным именем командлета работает:

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

Спасибо!

- Андерс

...