2016-10-17 13 views
2

Когда вы начинаете новую работу с Start-Job, вы можете передать его ScriptBlock и InitializationScript, например:Максимальный размер ScriptBlock/InitializationScript для Start-Job в PowerShell

Function FOO { 
    Write-Host "HEY" 
} 
Start-Job -ScriptBlock {FOO} -InitializationScript { 
    Function Foo { $function:FOO } 
} | Wait-Job | Receive-Job 

Там, кажется, предел размер сценария инициализации вы можете пройти, если он слишком большой, то вы получите сообщение об ошибке, таких как

[localhost] An error occurred while starting the background process. Error 
reported: The filename or extension is too long. 
    + CategoryInfo   : OpenError: (localhost:String) [], PSRemotingTransportException 
    + FullyQualifiedErrorId : -2147467259,PSSessionStateBroken

за кулисами, PowerShell создает новый процесс и проходящий InitializationScript как кодировке Base64 командной строки в год гос.

В соответствии с функцией Win32 CreateProcess() максимальный размер команды ine составляет 32 768 символов. Таким образом, очевидно, что если ваш Base64 закодированный InitializationScript приближается к этому размеру, вы, вероятно, получите сообщение об ошибке.

Я еще не нашел предела для размера параметра ScriptBlock. Может ли кто-нибудь подтвердить, что нет предела?

Я предполагаю, что нет предела, потому что похоже, что ScriptBlock передается дочернему процессу через стандартный ввод?

ответ

1

блок сценария фактически есть ограничение. и вы можете запустить команду с ScriptBlock с 3 пути:

$scriptblock = ' 
get-help 
get-command 
dir 
get-help *command* 
get-command *help* 
' 

iex $scriptblock 

или использовать его:

$scriptblock = { 
get-help 
get-command 
dir 
get-help *command* 
get-command *help* 

} 

Start-Process powershell.exe -ArgumentList "Command $scriptblock" 

или используйте:

Start-Process powershell {iex ' 
get-help 
get-command 
dir 
get-help *command* 
get-command *help* 


' 
} 

предел сценария, который может перейти в PowerShell. exe is 12190 bytes. , но для скрипта я никогда не получаю ограничение от powershell более 4000 строк кода.

+0

Есть ли у вас какие-либо доказательства того, что нет предела или причины, что нет предела? –

+0

@BobMortimer: я пишу около 4000 строк кода в блоке сценария, предел вашего текста или блока сценария зависит от вашего оборудования, такого как ram. – saftargholi

+0

@BobMortimer: но когда вы выполняете скрипт, вы можете просто пропустить 12190 байтов для powershell.exe – saftargholi