¿Cómo encadenar comandos en un símbolo del sistema especial de PowerShell 4?
Normalmente, los comandos de PowerShell se pueden encadenar con punto y coma. A continuación se abren 2 blocs de notas:
PS> notepad; notepad
También puede encadenar una declaración más compleja:
PS> Add-Type -AssemblyName System.IO.Compression; `
> $src = "C:\aFolder"; $zip="C:\my.zip"; `
> [io.compression.zipfile]::CreateFromDirectory($src, $zip)
Los comandos de PowerShell encadenados también se pueden invocar desde una línea de comandos de CMD:
C:\> powershell notepad; notepad
Esta publicación describe un método para crear un indicador de .Net 4.0 PowerShell, incluso si .Net 2.0 es el marco activo en su sistema operativo. Crea un script .cmd y lo ejecuta. Ahora estás en un entorno .Net 4.0.
El encadenamiento también funciona en ese indicador 4.0:
C:\> ps4.cmd
PS> notepad; notepad
Y también funciona desde el indicador CMD estándar:
C:\> ps4 notepad; notepad
Esta publicación describe una manera de hacerAdd-Type
a un nombre de ruta explícito (necesario para hacer referencia a ensamblajes 4.0 desde el indicador de ps4):
Add-Type -Path "C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.IO.Compression.FileSystem\v4.0_4.0.0.0__b77a5c561934e089\System.IO.Compression.FileSystem.dll"
Eso funciona, incluso cuando está encadenado en el indicador de ps4:
C:\> ps4
PS> Add-Type -Path "C:\x\System.IO.Compression.FileSystem.dll"; `
> $src = "C:\x\xl"; $zip="C:\x\xl.zip"; `
> [io.compression.zipfile]::CreateFromDirectory($src, $zip)
Problema: el encadenamiento de la declaración anterior falla cuando se inicia ps4 en un símbolo del sistema estándar (error completo en la parte inferior de la publicación):
C:\> ps4 Add-Type -Path "C:\x\System.IO.Compression.FileSystem.dll"; $src = "C:\x\xl"; $zip="C:\x\xl.zip"; [io.compression.zipfile]::CreateFromDirectory($src, $zip)
Sin embargo, todos los métodos anteriores funcionan. ¿Por qué? ¿Cómo puedo hacer que esto funcione?
The term 'C:\x\xl' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:73 + Add-Type -Path C:\x\System.IO.Compression.FileSystem.dll; $src = C:\x\xl <<<< ; $zip=C:\x\xl.zip; [io.compression.zipfile]::CreateFromDirectory($src, $zip) + CategoryInfo : ObjectNotFound: (C:\x\xl:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException The term 'C:\x\xl.zip' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:91 + Add-Type -Path C:\x\System.IO.Compression.FileSystem.dll; $src = C:\x\xl; $zip=C:\x\xl.zip <<<< ; [io.compression.zipfile]::CreateFromDirectory($src, $zip) + CategoryInfo : ObjectNotFound: (C:\x\xl.zip:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException Exception calling "CreateFromDirectory" with "2" argument(s): "The path is not of a legal form." At line:1 char:138 + Add-Type -Path C:\x\System.IO.Compression.FileSystem.dll; $src = C:\x\xl; $zip=C:\x\xl.zip; [io.compression.zipfile]::CreateFromDirectory <<<< ($src, $zip) + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException