Установите параметры в ScriptBlock при выполнении команд Powershell с C#
Я пытаюсь выполнить следующую команду powershell в C#
Invoke-Command -Session $session -ScriptBlock {
Get-MailboxPermission -Identity ${identity} -User ${user}
}
Я пытался с помощью следующего кода C#, но не мог установить личность и параметры пользователя.
var command = new PSCommand();
command.AddCommand("Invoke-Command");
command.AddParameter("ScriptBlock", ScriptBlock.Create("Get-MailboxPermission -Identity ${identity} -User ${user}"));
command.AddParameter("identity", mailbox);
command.AddParameter("user", user);
Когда я жестко кодирую значения при создании ScriptBlock, он работает нормально. Как я могу установить параметры динамически.
Есть ли лучший способ сделать это довольно объединенными значениями, как показано ниже.
command.AddParameter("ScriptBlock", ScriptBlock.Create("Get-MailboxPermission -Identity " + mailbox + " -User " + user));
1 ответ
Проблема с вашим кодом C# в том, что вы передаете identity
а также user
в качестве параметров для Invoke-Command
, Это более или менее эквивалентно следующему коду PowerShell:
Invoke-Command -ScriptBlock {
Get-MailboxPermission -Identity ${identity} -User ${user}
} -identity $mailbox -user $user
И с тех пор Invoke-Command
не имеет identity
а также user
параметры, это не удастся, когда вы запустите его. Чтобы передать значения в удаленный сеанс, вам нужно передать их -ArgumentList
параметр. Чтобы использовать переданные значения, вы можете объявить их в ScriptBlock
"s param
блок, или вы можете использовать $args
автоматическая переменная. Итак, на самом деле вам нужен эквивалент следующего кода PowerShell:
Invoke-Command -ScriptBlock {
param(${identity}, ${user})
Get-MailboxPermission -Identity ${identity} -User ${user}
} -ArgumentList $mailbox, $user
В C# это было бы так:
var command = new PSCommand();
command.AddCommand("Invoke-Command");
command.AddParameter("ScriptBlock", ScriptBlock.Create(@"
param(${identity}, ${user})
Get-MailboxPermission -Identity ${identity} -User ${user}
"));
command.AddParameter("ArgumentList", new object[]{mailbox, user});