2016-06-29 7 views
1

ich habe ein Problem mit ZIP-Komprimierung in einem Powershell-Skript. Der Code-Schnipsel in Frage:Powershell-Fehler beim geladenen Assembly mit

$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() 

Der Code versucht, eine Datei aus dem Archiv zu löschen und dann eine neuere Version der gleichen Datei. Wenn ich das Skript ausführe, erhalte ich Folgendes:

[FEHLER] Typ [System.IO.Compression.ZipArchiveMode] kann nicht gefunden werden. Stellen Sie sicher, dass die [ERROR] Baugruppe, die diese Art enthält, ist geladen. [FEHLER] Um C: \ xxxxx \ xxxxx \ xxxxx \ PowerShellIDEInstaller \ PowerShel [FEHLER] lIDEInstallers \ VSInstallCBH.ps1: 141 Zeichen: 2 [FEHLER] + $ mode = [System.IO.Compression.ZipArchiveMode] :: Update [ERROR] +
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~ [ERROR] + KategorieInfo: InvalidOperation: (System.IO.Compression.ZipArch [FEHLER] iveMode: TypeName) [], RuntimeException [FEHLER] + FullyQualifiedErrorId: TypeNotFound [ERROR]

Wenn ich es jedoch erneut ausführen, wird es ordnungsgemäß funktionieren. fand ich ein paar Beiträge (this und this), die von ähnlichen Problemen sprach. Ich verwende derzeit:

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

An der Spitze des Skripts. Ich fand auch this post, die vielversprechend aussah, aber hat nicht funktioniert. Ich sollte auch hinzufügen, dass das Problem in der ISE, Visual Studio und der Eingabeaufforderung auftritt. Der Code funktioniert, wenn ich ihn in einer der Umgebungen ein zweites Mal benutze.

Ich bin verwirrt und ratlos. Kann mir jemand sagen, warum das passiert?

Antwort

1

Daves Antwort war ein partieller Hinweis auf die Auflösung. Das Ändern des Befehls Add-Type, wie er vorgeschlagen hat, machte die Dinge besser. Der Code schlug jedoch immer noch fehl, weil die von ihm vorgeschlagene Änderung nun den folgenden Befehl verursachte:

fehlgeschlagen.

konnte ich das und das Problem zu beheben korrigieren, wenn ich gefunden:

die Erweiterungsmethoden verwenden zu können, müssen Sie die System.IO.Compression.FileSystem Montage in Ihrem Projekt verweisen.

Mit Dave Vorschlag, habe ich einfach das folgende mein Problem zu beheben:

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

Der Code funktioniert nun das erste Mal richtig.

2

Sie sind in der Nähe. Sie müssen in diesem Fall eine weitere Baugruppe laden. Verwenden Sie:

Add-Type -AssemblyName System.IO.Compression