Я думаю, вы можете немного упростить свой код - вам не нужны элементы Invoke-Command
и ScriptBlock
, чтобы просто вызывать по одной команде - вы можете вместо этого вызывать командлеты напрямую.
Вы также можете решить проблему внедрения скрипта, поднятую @madreflection в то же время, если вы создаете свои команды с параметрами.
Вот версия в PowerShell (мне было проще протестировать, чем раскрутить образец C #). проект :-)), который вы можете преобразовать в C #:
$p = [System.Management.Automation.PowerShell]::Create()
$c = new-object System.Management.Automation.Runspaces.Command("New-MailContact");
$c.Parameters.Add("Name", $name)
$c.Parameters.Add("ExternalEmailAddress", $address)
$null = $p.Commands.AddCommand($c)
$c = new-object System.Management.Automation.Runspaces.Command("Set-MailContact");
$c.Parameters.Add("Identity", $identity)
$c.Parameters.Add("HiddenFromAddressListsEnabled", $hidden)
$null = $p.Commands.AddCommand($c)
$p.Invoke()
Обновление - ах, только что заметил, что вы используете параметр Session
в Invoke-Command
- если выесли вы выполняете его с удаленным доступом, то вам, вероятно, do нужно Invoke-Command
в конце концов. Возможно, этот ответ поможет ...
Установка параметров в ScriptBlock при выполнении команд Powershell с C #