Test-Path返回True但ExtractToDirectory无法找到路径

时间:2015-11-17 19:36:19

标签: powershell zip

我有一个简单的PowerShell脚本,可以简化一些部署任务。

在脚本的早期部分,我创建了一个映射到Z的虚拟驱动器:它位于远程服务器上。绊倒的部分是它试图解压缩映射到Z的远程服务器上的文件:

function UnzipBuild($destinationFolder)
{    

    Add-Type -assembly "System.IO.Compression.Filesystem"    
    $zipFiles = Get-ChildItem -Path $destinationFolder -Filter *.zip
    foreach($zip in $zipFiles)
    {
        $folderName = $zip.ToString().TrimEnd(".zip")
        $extractPath = Join-Path $destinationFolder $folderName              

        New-Item -ItemType Directory $extractPath  
        Write-Host "Extracting $zip to $extractPath `r`n"                    
        [io.compression.zipfile]::ExtractToDirectory([string]$zip.FullName, "$extractPath")        
    }           
}

当它到达::ExtractToDirectory行时,它会抛出异常

Hit Line breakpoint on 'D:\MyDeploymentScript.ps1:85'
[DBG]: PS C:\WINDOWS\system32>> 
Exception calling "ExtractToDirectory" with "2" argument(s): "Could not find a part of the path 
'Z:\Build_11_17_13_28\Web'."
At D:\MyDeploymentScript.ps1:85 char:9
+         [io.compression.zipfile]::ExtractToDirectory([string]$zip.FullName, "$ex ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DirectoryNotFoundException

但疯狂的是,如果我断点同一个点并用Test-Path检查路径它返回True。我现在对于可能出现的问题感到茫然。

[DBG]: PS C:\WINDOWS\system32>> Test-Path Z:\Build_11_17_13_28\Web
True

1 个答案:

答案 0 :(得分:2)

看起来您可能正在使用New-PSDrive在脚本的早期部分映射您的驱动器。使用该cmdlet创建的驱动器仅在PowerShell中可见,除非您使用-Persist开关。该开关将其创建为实际的映射驱动器(就像您使用了net use或组策略或通过资源管理器映射它一样。)

您正在调用的.ExtractToDirectory方法无法查看任何powershell提供程序命名空间,因此需要一个对整个操作系统可见的实际映射驱动器或UNC路径

请注意,如果您正在使用-Persist,则可能还需要手动取消映射驱动器。