У меня возникла проблема с использованием сжатия zip в сценарии Powershell. Фрагмент кода, о котором идет речь:Ошибка Powershell при использовании загруженной сборки
$zipfile = $targetFile
$file = 'Script.ps1'
$stream = New-Object IO.FileStream($zipfile, [IO.FileMode]::Open)
$mode = [System.IO.Compression.ZipArchiveMode]::Update
$zip = New-Object IO.Compression.ZipArchive($stream, $mode)
($zip.Entries | ? { $file -contains $_.Name }) | % { $_.Delete() }
# Add a newer Script.ps1 file with the new Comment Based Help template.
$newFile = "$PSScriptRoot\$file"
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip,$newFile,"Script.ps1","optimal")
# Clean up.
$zip.Dispose()
$stream.Close()
$stream.Dispose()
код пытается удалить файл из архива, а затем добавить новую версию того же файла. Когда я запускаю сценарий, я получаю следующее:
[ERROR] Невозможно найти тип [System.IO.Compression.ZipArchiveMode]. Убедитесь, что сборка [ERROR], которая содержит этот тип, загружена . [ОШИБКА] В C: \ xxxxx \ xxxxx \ xxxxx \ PowerShellIDEInstallers \ PowerShel [ERROR] lIDEInstallers \ VSInstallCBH.ps1: 141 char: 2 [ERROR] + $ mode = [System.IO.Compression.ZipArchiveMode] :: Обновить [ОШИБКА] +
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ [ERROR] + Категория: InvalidOperation: (System.IO.Compression.ZipArch [ERROR] iveMode: TypeName) [], RuntimeException [ERROR] + FullyQualifiedErrorId: TypeNotFound [ERROR]
Однако, если я запустил его снова, он будет работать правильно. Я нашел несколько сообщений (this и this), которые говорили о похожих проблемах. Я в настоящее время использую:
Add-Type -AssemblyName System.IO.Compression.FileSystem
В верхней части сценария. Я также нашел this post, который выглядел многообещающим, но не работал. Я также должен добавить, что проблема возникает в ISE, Visual Studio и командной строке. Код будет работать, если я запустил его второй раз в любой среде.
Я сбитый с толку и в растерянности. Может ли кто-нибудь сказать мне, почему это происходит?