我有一个简单的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
答案 0 :(得分:2)
看起来您可能正在使用New-PSDrive
在脚本的早期部分映射您的驱动器。使用该cmdlet创建的驱动器仅在PowerShell中可见,除非您使用-Persist
开关。该开关将其创建为实际的映射驱动器(就像您使用了net use
或组策略或通过资源管理器映射它一样。)
您正在调用的.ExtractToDirectory
方法无法查看任何powershell提供程序命名空间,因此需要一个对整个操作系统可见的实际映射驱动器或UNC路径
请注意,如果您正在使用-Persist
,则可能还需要手动取消映射驱动器。