превратить string в scriptblock

в 12:12, , рубрики: powershell

Если вы используете 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 + '" )'

Автор: pak-nikolai

Источник

Поделиться новостью

* - обязательные к заполнению поля