actualizar powershell powershell-v2.0 windows-server-2008-r2

powershell - actualizar - No se puede encontrar el tipo[System.IO.Compression.CompressionLevel] asegúrese de que el ensamblaje que contiene este tipo esté cargado



powershell windows 8 (3)

He escrito este script de PowerShell que se supone que debe hacer archivos de todos los archivos de registro en un cierto rango de fechas.

$currentDate = Get-Date; $currentDate | Get-Member -Membertype Method Add; $daysBefore = -1; $archiveTillDate = $currentDate.AddDays($daysBefore); $sourcePath = ''C:/LOGS''; $destPath=''C:/LogArchieve/'+$archiveTillDate.Day+$archiveTillDate.Month+$archiveTillDate.Year+''.zip''; foreach( $item in (Get-ChildItem $sourcePath | Where-Object { $_.CreationTime -le $archiveTillDate }) ) { [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem"); $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal; [System.IO.Compression.ZipFile]::CreateFromDirectory($sourcePath,$destPath, $compressionLevel, $false); }

Funciona hasta antes del bucle foreach , pero una vez en un bucle da estos errores:

Unable to find type [System.IO.Compression.CompressionLevel]: make sure that the assembly containing this type is loaded. At line:4 char:65 + $compressionLevel = [System.IO.Compression.CompressionLevel] <<<< ::Optimal; + CategoryInfo : InvalidOperation: (System.IO.Compression.CompressionLevel:String) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound

Como System.IO.Compression es parte de .NET 4.5, lo he instalado en el sistema, pero aún así obtengo estos errores.

Estoy en Windows Server 2008 R2 y PowerShell v2.0.

¿Cómo puedo hacer que funcione?


Además, asegúrese de revisar su archivo $ pshome exe.config. Una vez tuve un problema donde Powershell ISE se negó a cargar un ensamblaje .NET, porque el archivo de configuración tenía .NET 2.0 en lugar de 4.


Intente usar Add-Type -AssemblyName System.IO.Compression.FileSystem lugar. Es más limpio y no depende de los ensamblajes de referencia que necesitan una instalación de Visual Studio.


Puede agregar manualmente una clase .NET a su sesión de PowerShell.

Quitar [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem"); desde su script y agregue lo siguiente en la parte superior:

Add-Type -Path "C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.5/System.IO.Compression.FileSystem.dll"

O en una caja de 32 bits:

Add-Type -Path "C:/Program Files/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.5/System.IO.Compression.FileSystem.dll"

Esto supone .NET 4.5 instalado en su sistema y System.IO.Compression.FileSystem.dll realmente existe.