繁体   English   中英

Start-Process cmdlet的-ArgumentList参数的最大长度是多少

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM