Если вы используете powershell то вы могли заметить что нельзя отправить строку на удаленную машину через Invoke-Command

Вам нужно предварительно сконвертировать строку в скриптблок
$scriptBlock = [Scriptblock]::Create($string) 

пример:
$remoteCommand = @" Import-Module ActiveDirectory
                  New-ADOrganizationalUnit -name
                  "@
 
$scriptBlock = [Scriptblock]::Create($remoteCommand)
 
Invoke-Command -ComputerName AD01 -ScriptBlock $scriptBlock


можно даже сделать для этого функцию
<#
Function to Convert a String into a Script Block
#>
Param(
        [Parameter(
            Mandatory = $true,
            ParameterSetName = '',
            ValueFromPipeline = $true)]
            [string]$string
        )
       $scriptBlock = [scriptblock]::Create($string)
       return $scriptBlock
}


дополнение от переводчика:
команды можно перечислить через точку запятой так
$sb = 'get-process; dir'

можно использовать так
# здесь мы динамически собираем команду подставляя в строку будущий пароль удаленной машины
$sb= '$admin = [ADSI]"WinNT://localhost/admin,User"; $admin.SetPassword( "' + $new_pass + '" )'

Комментарии (3)


  1. ApeCoder
    06.03.2016 15:50

    в powershell return не нужен, результатом функции становится результат выражения автоматически.


    1. pak-nikolai
      06.03.2016 16:13

      вы абсолютно правы. Оставил потому что так в оригинале. Может быть он выдернул этот кусок кода откудато и вставил для примера.


  1. PNAGAEV
    10.03.2016 09:21

    Поправьте

    сконевертировать