我有一个脚本,我需要以管理员身份运行一个命令。当我运行此命令时,脚本错误并出现1734错误。
我的脚本非常基本:
runas /user:Administrator "myexec.exe \"param with spaces\" otherparam -Djava.ext.dirs=%JAVA_EXT_DIRS%"
问题来自变量JAVA_EXT_DIRS,它有点巨大。
答案 0 :(得分:2)
这是一个老问题,但是我现在在Windows 10上使用runas命令遇到了同样的问题。事实证明, program 参数的最大长度必须小于995个字符。
例如,此命令仍然有效:
runas /user:someuser /savecreds "cmd.exe 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
此处的 program 参数具有994个字符,它应打开一个新的命令提示符。但是,如果您在该参数中再添加1,则执行将失败,并显示1734: The array bounds are invalid.
错误。
如果将 program 参数进一步增加到1026个字符,则错误将更改为-2147024809: The parameter is incorrect.
。
命令行参数的常规限制似乎要大得多(我在SO上读到了约8191个字符),因此这似乎是runas.exe本身的问题。
修改:
当我尝试使用带有-Credential
标志的PowerShell脚本时,甚至遇到了类似的问题:
$username = "username"
$password = "password"
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential $username, $securePassword
$argument = $args[0]
Start-Process -FilePath "C:\path\to\my.exe" -Credential $credentials -ArgumentList "-arg $argument"
因此,这可能是基础Windows机制的问题,而不是runas.exe本身。
答案 1 :(得分:0)
%JAVA_EXT_DIRS%
的值也可能包含空格。你最好用双引号括起来:
runas /user:Administrator "myexec.exe \"param with spaces\" otherparam -Djava.ext.dirs=\"%JAVA_EXT_DIRS%\""