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

无需管理员权限在Hyper-V虚拟机中调用PowerShell 7命令

问题描述

在Windows 11主机上通过PowerShell远程操作Windows 10 Hyper-V虚拟机,需满足以下要求:

  • 来宾OS中使用PowerShell 7执行命令
  • 无需来宾OS管理员权限(runas /trustlevel:0x20000 <cmd>无法满足需求)
  • 同步执行并捕获输出(计划任务、explorer.exe <cmd>等降权方法不适用)

当前状态:

  • PowerShell 5.1中,非管理员可正常通过Invoke-Command/New-Session远程执行命令
  • PowerShell 7中,管理员用户可正常调用会话配置,但非管理员执行报错:OpenError: Cannot create or open the configuration session PowerShell.7.

已尝试无效操作:

  • 将用户添加至"Remote Management Users"组
  • 通过Set-PSSessionConfiguration -Name PowerShell.7 -ShowSecurityDescriptorUI为会话配置添加用户/Users组权限
  • 修改默认Microsoft.PowerShell配置指向PowerShell 7(实际执行仍使用5.1)

排除方案:PowerShell over SSH(存在密钥、网络可达等问题,需更简便方案)


解决方案

1. 修复PowerShell 7会话配置的安全描述符

默认Enable-PSRemoting创建的PowerShell.7会话配置,非管理员缺少**Execute (Invoke)**权限,需通过命令行精确配置:

# 以管理员身份在来宾OS的PowerShell 7中执行
$configName = "PowerShell.7"
$sd = Get-PSSessionConfiguration -Name $configName | Select-Object -ExpandProperty SecurityDescriptorSddl
$newSd = ConvertFrom-SddlString -Sddl $sd

# 添加本地Users组的Execute权限
$usersSid = New-Object System.Security.Principal.SecurityIdentifier([System.Security.Principal.WellKnownSidType]::BuiltinUsersSid, $null)
$accessRule = New-Object System.Security.AccessControl.CommonAce(
    [System.Security.AccessControl.AceFlags]::None,
    [System.Security.AccessControl.AceQualifier]::AccessAllowed,
    268435456, # 对应Execute (Invoke)权限掩码
    $usersSid,
    $false,
    $null
)

$newSd.DiscretionaryAcl.AddAce($accessRule)
Set-PSSessionConfiguration -Name $configName -SecurityDescriptorSddl $newSd.GetSddlForm([System.Security.AccessControl.AccessControlSections]::All) -Force

2. 调整WinRM服务的非管理员会话限制

WinRM默认可能限制非管理员创建远程会话,需修改服务配置:

# 以管理员身份在来宾OS的PowerShell(5.1/7均可)中执行
# 按需设置受信任主机(示例为允许所有,可根据网络环境调整)
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force
# 保持加密传输,禁用明文
Set-Item WSMan:\localhost\Service\AllowUnencrypted -Value $false -Force
# 启用协商认证
Set-Item WSMan:\localhost\Service\Auth\Negotiate -Value $true -Force
# 允许非管理员远程访问
Set-Item WSMan:\localhost\Service\AllowRemoteAccess -Value $true -Force
# 调整并发用户数(按需设置)
Set-Item WSMan:\localhost\Service\Config\MaxConcurrentUsers -Value 10 -Force

3. 验证PowerShell 7安装目录权限

确保非管理员对PowerShell 7安装目录(默认C:\Program Files\PowerShell\7)有读取和执行权限:

  1. 右键目录 → 属性 → 安全选项卡
  2. 检查Users组是否包含“读取和执行”、“列出文件夹内容”、“读取”权限,缺失则添加

4. 测试远程执行

在Windows 11主机上,用非管理员PowerShell执行以下命令验证:

Invoke-Command -ComputerName <虚拟机IP/主机名> -ConfigurationName PowerShell.7 -ScriptBlock { $PSVersionTable.PSVersion }

成功执行后会返回PowerShell 7的版本信息,且输出同步捕获。


原因分析

PowerShell 7会话配置的默认安全描述符未给非管理员分配**Execute (Invoke)**核心权限,仅通过图形化界面添加常规权限无法解决问题;同时WinRM服务默认可能限制非管理员创建远程会话,需显式开启相关配置。

内容的提问来源于stack exchange,提问作者ibebbs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:15:37