2015-11-17 4 views
2

У меня есть простой сценарий powershell, который должен облегчить некоторые задачи развертывания.Test-Path возвращает True, но ExtractToDirectory Не удалось найти путь

В более ранней части сценария я создаю виртуальный диск, сопоставленный с 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 
+2

При отображении диска 'Z:' вы используете 'New-PSDrive'? Если это так, вы используете '-Persist'? Если нет, то метод .net, который вы вызываете, вероятно, не может видеть диск. – briantist

+0

Test-path определяет, существует ли путь, он не проверяет, что это каталог. Является ли Z: \ Build_11_17_13_28 \ Web фактически каталогом? У вашего сценария есть разрешение на запись в каталог? Вы также можете изучить $ error [0] .exception, чтобы узнать, существует ли элемент InnerException и имеет значение. –

+0

@briantist Хорошее добавление, которое сработало. Странно, что во время Debug я все же могу перейти к Z: даже если persist не был включен. – tyh

ответ

2

Похоже, вы могли бы быть отображение вашего диска в предыдущей части сценария с New-PSDrive. Привод, созданный с помощью этого командлета, отображается только в PowerShell, если вы не используете переключатель -Persist. Этот переключатель создает его как фактический сопоставленный диск (как если бы вы использовали net use или групповую политику или сопоставили его через проводник).

Метод .ExtractToDirectory, который вы вызываете, не может видеть ни одно из пространств имен провайдеров powershell, поэтому ему нужен реальный сопоставленный диск или UNC-путь, видимый для всей операционной системы.

Помните, что если вы используете -Persist, вы также можете отключить диск вручную.

 Смежные вопросы

  • Нет связанных вопросов^_^