Когда вы начинаете новую работу с 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
передается дочернему процессу через стандартный ввод?
Есть ли у вас какие-либо доказательства того, что нет предела или причины, что нет предела? –
@BobMortimer: я пишу около 4000 строк кода в блоке сценария, предел вашего текста или блока сценария зависит от вашего оборудования, такого как ram. – saftargholi
@BobMortimer: но когда вы выполняете скрипт, вы можете просто пропустить 12190 байтов для powershell.exe – saftargholi