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

Hyper-V远程执行Get-VM控制台正常,脚本运行却报权限错误

远程批量检查VM健康状态的权限异常排查与解决方案

核心问题定位

这类问题的核心差异在于PowerShell交互式会话(如管理员ISE)与非交互式会话(脚本直接运行、计划任务)的身份验证上下文不同,即使同一用户执行,两种场景下的权限令牌、验证方式可能存在差异。

具体排查与修复步骤

  1. 校验WinRM服务的身份验证配置

    • 在问题主机上执行命令,检查WinRM的验证方式:
      winrm get winrm/config/service/auth
      
    • 确保Kerberos和Negotiate处于启用状态(非交互式会话依赖这两种验证),若未启用,执行:
      winrm set winrm/config/service/auth @{Kerberos="true"; Negotiate="true"}
      
  2. 调整脚本的身份传递逻辑

    • 在脚本中显式指定验证方式与凭据,避免依赖默认配置:
      # 提前获取脚本运行用户的凭据(若需)
      $scriptCred = Get-Credential -Message "输入域用户凭据"
      # 远程会话参数配置
      $sessionParams = @{
          ComputerName     = "RemoteHost1"
          Authentication   = "Kerberos"
          Credential       = $scriptCred
          SessionOption    = New-PSSessionOption -SkipCACheck -SkipCNCheck
      }
      # 建立远程会话执行命令
      $remoteSession = New-PSSession @sessionParams
      $vmStatus = Invoke-Command -Session $remoteSession -ScriptBlock { Get-VM }
      Remove-PSSession $remoteSession
      
  3. 解决UAC令牌过滤问题

    • 域用户即使加入管理员组,非交互式会话可能被UAC过滤掉管理员权限,需修改本地组策略:
      • 打开gpedit.msc,导航至计算机配置>Windows设置>安全设置>本地策略>安全选项
      • 将**“用户账户控制:用于内置管理员账户的管理员批准模式”**设为「已禁用」
      • 将**“用户账户控制:以管理员批准模式运行所有管理员”**设为「已禁用」
      • 执行gpupdate /force使配置生效
  4. 计划任务的配置修正

    • 配置计划任务时,需勾选:
      • 「不管用户是否登录都要运行」
      • 「使用最高权限运行」
    • 务必指定域用户凭据,不要使用本地系统账户执行

本地执行的统一报告方案

既然Connectwise Control本地执行脚本正常,可通过以下方式生成统一报告:

  • 修改本地运行的脚本,将VM健康数据写入域服务器共享文件夹的JSON/CSV文件(示例):
    $sharedPath = "\\DomainServer\VMHealthReports"
    $hostName = $env:COMPUTERNAME
    $vmData = Get-VM | Select-Object Name, State, Status
    $vmData | ConvertTo-Json | Out-File "$sharedPath\$hostName-VMStatus.json"
    
  • 所有主机执行完成后,运行汇总脚本生成统一报告并发送邮件:
    $sharedPath = "\\DomainServer\VMHealthReports"
    $allReports = Get-ChildItem $sharedPath -Filter "*.json" | Get-Content | ConvertFrom-Json
    $htmlContent = $allReports | ConvertTo-Html -Title "VM健康状态汇总报告" -Property Name, State, Status, @{Name="主机名"; Expression={$_.PSComputerName}}
    Send-MailMessage -From "vm-report@domain.com" -To "admin@domain.com" -Subject "VM健康汇总报告" -Body $htmlContent -BodyAsHtml -SmtpServer "smtp.domain.com"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:54:54