我有一个 powershell 脚本,它将 String 和 String[] 转换为 BlockScript。到目前为止它一直可以工作,但在一些 Windows 升级后它突然开始失败。
function Invoke-ForegroundCommand {
param (
[Parameter(Mandatory = $true)]
[scriptblock]
$Command
)
Invoke-Command -ScriptBlock $Command -Verbose
$exitCode = $LASTEXITCODE
}
$javaOptions = @()
$javaOptions + @(
"-Dfile.encoding=UTF8"
"-XX:+HeapDumpOnOutOfMemoryError"
"-XX:+UseG1GC"
"-Xms512m"
"-Xmx2048m"
"--add-opens=java.base/java.nio=ALL-UNNAMED"
"--add-opens=java.base/java.util=ALL-UNNAMED"
"--add-opens=java.base/java.security=ALL-UNNAMED"
)
Invoke-ForegroundCommand -Command "java" -Arguments $javaOpts
它抛出异常“无法处理参数'Command'的参数转换。无法转换类型的“java”值 | “System.String”以键入“System.Management.Automation.ScriptBlock”。”
我已经尝试使用 {} 将“java”和 $javaOptions 包装到命令块中,并且还尝试使用
创建脚本块$command = "java $javaOptions"
or $command = "java " + ($javaOptions -join " ")
$ScriptBlock = [System.Management.Automation.ScriptBlock]::Create($command)
我无法让它工作。你知道如何让它发挥作用吗?
Invoke-Command
调用 POWERSHELL 命令\脚本。java
不是 powershell 命令,所以显然它不起作用。
Start-Process
还创建
$javaOptions
只是为了添加紧随其后的元素是没有用的,只是
$javaOptions = @(
"-Dfile.encoding=UTF8"
"-XX:+HeapDumpOnOutOfMemoryError"
"-XX:+UseG1GC"
"-Xms512m"
"-Xmx2048m"
"--add-opens=java.base/java.nio=ALL-UNNAMED"
"--add-opens=java.base/java.util=ALL-UNNAMED"
"--add-opens=java.base/java.security=ALL-UNNAMED"
)