2016-11-22 64 views
4

以下参数Split-Path不正确,应该是$delZipExe
这使得$delZipCmd散列被设置为空。
我希望WorkingDirectory值在$delZipCmd散列中设置为空。Powershell splat销毁变量

为什么会发生这种情况?

Set-StrictMode -Version latest 
$delZipExe = '\\servername\ziptools\SP3DDeliverZips.exe' 
$delZipDest = "D:\" 
$delZipArgs = @('/execute', 
       '/source', '/RAD ', '/debugpdb', '/wait' 
       ) 
$delZipCmd = @{ FilePath = $delZipExe; 
       ArgumentList = $delZipArgs; 
       NoNewWindow = $true; 
       WorkingDirectory = (Split-Path $delZipCmd); # <== should be $delZipExe 
       Wait = $true; 
       } 
$delZipCmd | ft 
+1

我不明白你的问题,你做了什么错误,你期待什么,也没有人知道第10行的注释你的代码意味着什么。你能澄清吗? –

+0

在最后一行,$ delZipCmd是$ null。正如我在问题中所说的,我想明白为什么会发生这种情况,因为我预计WorkingDirectory的值将为$ null,但所有其他条目的设置都会正确。 – opedroso

回答

4

由于参数变量的验证,以Split-Path期间构造哈希表的抛出终止错误,整个表达式结束。

您可以在子表达式($())隔离Split-Path语句来避免这种情况:

$delZipCmd = @{ 
    FilePath = $delZipExe; 
    ArgumentList = $delZipArgs; 
    NoNewWindow = $true; 
    WorkingDirectory = $(Split-Path $delZipCmd); # <== notice the $ 
    Wait = $true; 
} 
+0

为什么使用$ delZipCmd作为Split-Path,*在$ delZipCmd哈希表的声明中?这段代码对我来说没有意义。 –

+0

@KoryGill由于OP特别询问有关*的行为*,请重新阅读 –

+0

严格模式,我期望原始代码不会运行,因为$ delZipCmd没有设置(这是您得到的当你从一个新的/干净的PowerShell窗口运行它没有任何prev变量设置)。所以对我而言,这个问题以一个正确的前提为主张。继续... –