2010-06-09 88 views
3

似乎有人巧妙地改变了在powershell上解析参数切换的方式。在某些机器上,“split-path c:\ x \ y --parent”起作用。在一些它失败。任何人都可以告诉我a)是什么导致了这种差异,b)我该如何阻止它?如何阻止Powershell在参数中坚持一个破折号?

+0

一年后,我仍然不知道为什么早期版本的PowerShell使用双破折号。较新的机器不会,事实上,我们转换了所有的脚本。 – 2011-07-09 00:46:15

回答

3

开关参数应该在V1和V2中以相同的方式工作(这意味着-parent是正确的语法)。

在你的情况下,--parent应该作为一个字符串绑定到一个参数。它不应该被解释为开关。您可以通过Trace-Command

Trace-Command parameterbinding -Expression { split-path c:\x\y --parent} -PSHost 

进一步信息测试结合:

考虑--:背后--每个字符串被解释为参数,如果它看起来像一个开关不管。

[14]: function test { 
    param([switch]$sw, [string]$str) 
    write-host switch is $sw 
    write-host str is $str 
} 
[15]: test 1 
switch is False 
str is 1 
[16]: test -sw 
switch is True 
str is 
[17]: test -- -sw 
switch is False 
str is -sw 
+0

完全同意单个破折号是正确的。问题是,我们有100多个使用双破折号的脚本,它可以在办公室的大多数机器上使用。 – 2010-06-11 06:47:00

+0

“Trace-Command”的输出是什么? – stej 2010-06-11 10:06:48