You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:47:38