直接在 PowerShell 7.5.0-rc.1 中运行此命令时,会提取存档:
Expand-Archive -path .\test.zip -DestinationPath .
但是通过 Deno 脚本运行它:
new Deno.Command("PowerShell", {
args: ["Expand-Archive -path ./test.zip -DestinationPath ."],
}).spawn();
产生这个错误:
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
然后我运行这个脚本:
new Deno.Command("PowerShell", {
args: ["Import-Module Microsoft.PowerShell.Archive"],
}).spawn();
new Deno.Command("PowerShell", {
args: ["Expand-Archive -path ./test.zip -DestinationPath ."],
}).spawn();
并产生这个错误:
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
以下是执行策略的当前配置:
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Unrestricted
CurrentUser Undefined
LocalMachine Unrestricted
你有什么想法吗?
因此它在PowerShell (Core) 7中运行,但您从 Deno 调用的是Windows PowerShell的 CLI 。
powershell.exe
这两个版本默认具有单独的 脚本执行策略,并且 Windows PowerShell 的有效执行策略会阻止在您的情况下加载模块。
因此,为了使用 PowerShell 7 的 CLI,您必须
pwsh.exe
以该方式进行。也就是说,对于可预测的运行时行为,您应该使用 CLI 参数临时指定执行策略(仅针对正在创建的进程),
-ExecutionPolicy
该参数适用于和 :powershell.exe
pwsh.exe
应用于您的情况,使用
pwsh.exe
(假定可通过$env:PATH
;如果需要,使用完整路径):-NoProfile
抑制配置文件加载。设置允许在本地执行未签名的脚本的执行策略
RemoteSigned
,但要求从网络下载的脚本必须经过签名。Bypass
将允许无条件执行脚本。-Command
(-c
),而可选的 withpowershell.exe
是必需的,pwsh.exe
因为后者现在默认为-File
CLI 参数。警告:
如果在给定的计算机上,执行策略通过 GPO(组策略对象)控制,则它们无条件地确定有效策略 -在这种情况下不遵守 CLI 覆盖。
请参阅此答案以获得有关 PowerShell 执行策略的全面概述。