Este comando extrai o arquivo ao executá-lo diretamente no PowerShell 7.5.0-rc.1:
Expand-Archive -path .\test.zip -DestinationPath .
Mas executando-o por meio de um script Deno:
new Deno.Command("PowerShell", {
args: ["Expand-Archive -path ./test.zip -DestinationPath ."],
}).spawn();
produz este erro:
Expand-Archive : The 'Expand-Archive'
command was found in the module
'Microsoft.PowerShell.Archive', but the
module could not be loaded. For more
information, run 'Import-Module
Microsoft.PowerShell.Archive'.
At line:1 char:1
+ Expand-Archive -path ./test.zip
-DestinationPath .
+ ~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound
: (Expand-Archive:String) [], CommandNot
FoundException
+ FullyQualifiedErrorId : CouldNotAutolo
adMatchingModule
Em seguida, executo este script:
new Deno.Command("PowerShell", {
args: ["Import-Module Microsoft.PowerShell.Archive"],
}).spawn();
new Deno.Command("PowerShell", {
args: ["Expand-Archive -path ./test.zip -DestinationPath ."],
}).spawn();
e gera este erro:
Import-Module : File C:\program files\powersh
ell\7-preview\Modules\Microsoft.PowerShell.Ar
chive\Microsoft.PowerShell.Archive.psm1
cannot be loaded because running scripts is
disabled on this system. For more
information, see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170
.
At line:1 char:1
+ Import-Module Microsoft.PowerShell.Archive
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError:
(:) [Import-Module], PSSecurityExceptio
n
+ FullyQualifiedErrorId : UnauthorizedAc
cess,Microsoft.PowerShell.Commands.Impor
tModuleCommand
Expand-Archive : The 'Expand-Archive'
command was found in the module
'Microsoft.PowerShell.Archive', but the
module could not be loaded. For more
information, run 'Import-Module
Microsoft.PowerShell.Archive'.
At line:1 char:1
+ Expand-Archive -path ./test.zip
-DestinationPath .
+ ~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound
: (Expand-Archive:String) [], CommandNot
FoundException
+ FullyQualifiedErrorId : CouldNotAutolo
adMatchingModule
Aqui está a configuração atual das políticas de execução :
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Unrestricted
CurrentUser Undefined
LocalMachine Unrestricted
Você tem alguma ideia?
Então funcionou no PowerShell (Core) 7 , mas o que você está chamando do Deno é a CLI do Windows
powershell.exe
PowerShell .Essas duas edições têm, por padrão, políticas de execução de script separadas , e é a política de execução efetiva do Windows PowerShell que impede o carregamento do módulo no seu caso.
Portanto, para usar a CLI do PowerShell 7, você deve direcionar
pwsh.exe
.Dito isso, para um comportamento de tempo de execução previsível, você deve especificar uma política de execução ad hoc (somente para o processo que está sendo criado), usando o
-ExecutionPolicy
parâmetro CLI, que funciona com e :powershell.exe
pwsh.exe
Aplicado ao seu caso, usando
pwsh.exe
(que se presume ser detectável via$env:PATH
; use um caminho completo, se necessário):-NoProfile
suprime o carregamento do perfil .Definir uma política de execução
RemoteSigned
permite a execução de scripts não assinados localmente, mas exige que os scripts baixados da web sejam assinados.Bypass
permitiria a execução incondicional de scripts.-Command
(-c
), enquanto opcional compowershell.exe
é necessário compwsh.exe
, já que o último agora assume como padrão o-File
parâmetro CLI.Advertência :
Se, em uma determinada máquina, a política de execução for controlada por GPOs (Objetos de Política de Grupo), eles determinam incondicionalmente a política efetiva - uma substituição de CLI não é respeitada neste caso.
Veja esta resposta para uma visão geral abrangente das políticas de execução do PowerShell.