2016-10-12 68 views
1

我想使用PowerShell自动执行diskpart.exe,但PowerShell构建的脚本参数被视为无效。例如,琐碎的Diskpart脚本将低于按预期工作:连接PowerShell阵列中的字符串

[email protected](
    "select disk 0", 
    "detail disk", 
    "exit" 
) 
$diskDetailsDPCom | diskpart 

但是当我尝试通过连接变量或常量“0”,然后DISKPART失败The arguments specified for this command are not valid.打造的“选择磁盘”命令:

[email protected](
    "select disk " + "0", 
    "detail disk", 
    "exit" 
) 
$diskDetailsDPCom | diskpart 

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

+2

' “选择磁盘” +“0”' - >'( “选择磁盘” +“0”)' – PetSerAl

+0

其中有些报价是MS-Word的 “智能引号”。那是故意的吗? –

+0

智能报价是由于新的Word安装和懒惰。再次感谢! – Charlweed

回答

4

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

@("select disk 0", “detail disk”, “exit”) 

按照您的期望值计算三个字符串的数组。然而,你的第二个例子实际上解析为

@("select disk " + (“0”, “detail disk”, “exit”)) 

做串联,PowerShell中的数组与-join操作字符串转换,你的结果是一个字符串"select disk 0 detail disk exit",包裹在一个阵列。

为了得到你想要的数组,围绕串联放置括号。

@(
    ("select disk " + “0”), 
    “detail disk”, 
    “exit” 
) 
+0

这是我的问题。谢谢! – Charlweed

-1

修正的脚本。该泼洒不会工作,但阵列部分应该仍然是正确的,如下面

[email protected](
    "select disk", "0" 
    , "detail disk" 
    , "exit" 
) 
@diskDetailsDPCom | diskpart 

非工作答案@ryan bemrose的答案。

而是通过管道将ARGS到diskpart的试...

[email protected](
    "select disk", "0" 
    , "detail disk" 
    , "exit" 
) 
diskpart @diskDetailsDPCom 

...这里的PowerShell将图示args来阵攻击diskpart

请注意,任何需要它们之间空格的参数都是独立的数组元素。如果使用诸如assign letter=R的开关,则letter=R将是一个数组元素。

这是未经测试的diskpart,但我已经成功地使用了这种方法在外部命令的左边上溅出一组参数,而不是管道输入并且工作。

+1

对不起,diskpart是古怪的,它不需要命令行参数,它运行“脚本”。所以命令必须传入。我试过你的建议,并且diskpart“无法处理参数” – Charlweed