Я пытаюсь написать утилиту, чтобы получить архивный артефакт .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 вызывает это исключение?