在 PowerShell 数组中连接字符串

Cha*_*eed 2 powershell

我想使用 PowerShell 来自动化 diskpart.exe,但 PowerShell 构建的脚本参数被视为无效。例如,下面的简单的 diskpart 脚本按预期工作:

$diskDetailsDPCom=@(
    "select disk 0",
    "detail disk",
    "exit"
)
$diskDetailsDPCom | diskpart
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试通过连接变量或文字“0”来构建“select disk”命令时,diskpart 失败并显示The arguments specified for this command are not valid.

$diskDetailsDPCom=@(
    "select disk " + "0",
    "detail disk",
    "exit"
)
$diskDetailsDPCom | diskpart
Run Code Online (Sandbox Code Playgroud)

这里发生了什么,我该如何继续?

Rya*_*ose 5

在 PowerShell 中,逗号 ( ,) 运算符的优先级高于串联 ( +) 运算符。您的两个代码块的评估方式不同。

@("select disk 0", “detail disk”, “exit”)
Run Code Online (Sandbox Code Playgroud)

如您所料,计算结果为包含三个字符串的数组。但是,您的第二个示例实际上解析为

@("select disk " + (“0”, “detail disk”, “exit”))
Run Code Online (Sandbox Code Playgroud)

为了进行连接,PowerShell 使用-join运算符将数组转换为字符串,您的结果是"select disk 0 detail disk exit"包含在数组中的字符串。

要获得您想要的数组,请在连接前后加上括号。

@(
    ("select disk " + “0”),
    “detail disk”,
    “exit”
)
Run Code Online (Sandbox Code Playgroud)