Извлечение ExtractToFile «Не удалось найти часть пути» исключение при извлечении файлов в папку PSDrive - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь написать утилиту, чтобы получить архивный артефакт .zip из TeamCity, который содержит небольшой сервис, и извлечь его на удаленную машину. Я могу взаимодействовать с API и загружать архив без проблем, но кажется, что всякий раз, когда я вызываю ExtractToFile, метод выдает исключение, говорящее, что он «не может найти часть пути» Y: \ ServiceFolder \ examplefile. dll '"

Я попытался просто извлечь в сетевую папку (например, \ $ IP \ d $ \ ServiceFolder), но это приводит к той же ошибке. Я отлаживаю это в VS Code, , который работает в режиме администратора .

Интересно, что ExtractToDirectory работает просто отлично, но не позволяет мне просто перезаписывать файлы, которые существуют в папку (то есть кто-то может захотеть сохранить некоторые утилиты или файлы журналов при установке более новой версии этой службы). Я бы предпочел не копировать все содержимое каталога в данный подкаталог, потому что, хотя я хочу сохранить некоторые файлы журналов / утилит, я не хочу, чтобы коллекция папок создавалась просто для сохранения файлов.

try 
{
    New-PSDrive -Name "Y" -PSProvider FileSystem -Root "\\$IP\d$" -Credential $Credentials -ErrorAction Stop    
}
catch [System.ComponentModel.Win32Exception] 
{
    New-PSDrive -Name "Y" -PSProvider FileSystem -Root "\\$IP\d$"
}

Add-Type -AssemblyName System.IO.Compression.FileSystem

$zip= [System.IO.Compression.ZipFile]::OpenRead($zipStoragePath)

$serviceFolderExists= Test-Path "Y:\ServiceFolder"

if (-Not $serviceFolderExists) 
{
    Write-Output "The service folder doesn't exist! Creating directory..."
    New-Item -Path "Y:\" -Name "ServiceFolder" -ItemType "directory"
}

foreach ($item in $zip.Entries) 
{
    Write-Output "Extracting '$item' to Service folder"
    Write-Output $item.FullName
    $extractPath = "Y:\ServiceFolder"
    $destinationPath = Join-Path $extractPath $item
    [System.IO.Compression.ZipFileExtensions]::ExtractToFile($item, $destinationPath, $true)
}

$zip.Dispose()

Другие вопросы, которые говорили об этой проблеме, поднимали такие вещи, как ограничения на количество символов, но у меня меньше 250 символов с моими путями к файлам. Почему ExtractToFile вызывает это исключение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...