当你使用Start-Job
开始一份新工作时,你可以传递一个ScriptBlock
和一个InitializationScript
,例如:
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()
函数,命令行的最大大小是32,768个字符。所以,如果你的Base64编码的InitializationScript
接近这个大小,那么你可能会遇到错误。
我还没有找到ScriptBlock
参数的大小限制。有人能证实没有限制吗?
我认为没有限制,因为看起来ScriptBlock
通过标准输入流传输到子进程中。