![](/img/trans.png)
[英]Start-Process cmdlet with -ArgumentList throw “Invalid Argument” error
[英]What is the maximum length of the -ArgumentList parameter of the Start-Process cmdlet
我想使用Start-Process
从PS调用一个程序,并将大量参数传递给该程序应该在后台处理的调用。
偶尔可能会出现,该程序提供的参数的总数可能是数百个(总数大约为200-300),每个string
的长度最多为32个字节。 我尝试找出-ArgumentList
的最大长度,但到目前为止找不到任何引用。
我怀疑我会在提供的参数数量方面遇到任何问题,但确实使我感到烦恼,实际上-ArgumentList
参数可能有多少个参数或总共有多长时间?
可能是8191个字符的组合长度。 或者,这取决于您正在运行的程序。
来源:试用与错误(Windows 8.1 / PSv4):
Start-Process -FilePath cmd -ArgumentList (@('/k','echo 1') + (2..1852))
# works
Start-Process -FilePath cmd -ArgumentList (@('/k','echo 1') + (2..1853))
# doesn't work
在6769左右会触发异常:
PS C:\> Start-Process -FilePath cmd -ArgumentList (@('/k','echo 1') + (2..6768))
Start-Process : This command cannot be run due to the error: The filename or extension is too long.
At line:1 char:1
+ Start-Process -FilePath cmd -ArgumentList (@('/k','echo 1') + (2..676 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException
+ FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand
但是,如果我稍微移动数字(2..1852|%{$_*100})
那么它很快就会失败。 暗示不是重要的参数数目,而是合并结果的字符串长度。
((@('/k','echo 1') + (2..1852)) -join " ").Length
# 8160 when it works, 8165 when it breaks
Google的8165 limit cmd
可获得:
https://support.microsoft.com/zh-CN/kb/830473
在运行Microsoft Windows XP或更高版本的计算机上,可以在命令提示符下使用的字符串的最大长度是8191个字符。
因此,是8191个字符还是……也许取决于您正在调用的程序。
300 * 32会破坏它。
但是话又说回来,如果您已经有了一个可以处理它的程序,则启动过程对于将1,800个项目作为参数列表的数组似乎没有问题。
我发现,将-Credential
参数用作Start-Process
命令的一部分时,长度限制明显减少。 如果我超过900个字符,则会收到“参数不正确”的提示。 少于这个,它工作正常。
在不使用-Credential
,我已经能够提交一个长得多的参数(6000多个字符)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.