Powershell:无法将“System.String”类型的“java”值转换为“System.Management.Automation.ScriptBlock”类型

问题描述 投票:0回答:1

我有一个 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)

我无法让它工作。你知道如何让它发挥作用吗?

powershell powershell-7.4
1个回答
0
投票

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"
)
© www.soinside.com 2019 - 2024. All rights reserved.