.NET8单元测试调用PowerShell命令因执行策略报错求助
解决PowerShell SDK调用Get-Disk模块加载失败问题
问题原因
你执行的Set-ExecutionPolicy Unrestricted是针对Windows PowerShell 5.x的,而你使用的Microsoft.PowerShell.SDK 7.4对应PowerShell 7系列,两者的执行策略是独立存储的,所以之前的设置不会生效。另外,普通用户权限下运行VS2022,也可能导致模块加载时权限不足。
解决方案
1. 单独设置PowerShell 7的执行策略
- 以管理员身份打开PowerShell 7(搜索
pwsh,右键选择「以管理员身份运行」) - 执行以下命令设置当前用户的执行策略(推荐用
RemoteSigned,比Unrestricted更安全):Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - 按提示输入
Y确认更改。
2. 调整Runspace配置(代码层面)
在创建Runspace时,显式指定执行策略,确保会话允许加载模块:
protected Collection<PSObject>? GetDisk(int index) { // 创建初始会话状态,设置执行策略 var initialState = InitialSessionState.CreateDefault(); initialState.ExecutionPolicy = ExecutionPolicy.RemoteSigned; var runspace = RunspaceFactory.CreateRunspace(initialState); runspace.Open(); var pipeline = runspace.CreatePipeline(); var dir = new Command("Get-Disk"); dir.Parameters.Add("Number", index); pipeline.Commands.Add(dir); pipeline.Commands.Add(new Command("Get-Partition")); pipeline.Commands.Add(new Command("Get-Volume")); return pipeline.Invoke(); }
3. 以管理员身份运行VS2022
Get-Disk属于系统级命令,普通用户权限可能无法正常加载Storage模块。右键VS2022图标,选择「以管理员身份运行」,再执行单元测试。
4. 验证PowerShell 7环境
打开PowerShell 7,直接执行Get-Disk -Number <你的磁盘索引>,确认命令能正常运行。如果这里也报错,先解决PowerShell 7本身的模块加载问题,再回到代码调试。
内容的提问来源于stack exchange,提问作者Soleil
相关产品推荐
相关产品推荐

