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

如何用PowerShell检测WinServer2016指定卷VSS影子副本状态

Windows Server 2016 VSS影子副本状态检测PowerShell方案

实现逻辑说明

GUI界面(此电脑 > 右键目标卷 > 配置影子副本)展示的卷级VSS启用状态、下次运行时间,无法通过两类常用接口获取:

  • vssadmin list volumes:仅枚举支持承载影子副本的卷列表,不返回配置状态
  • Get-CimInstance Win32_ShadowCopy:仅查询已生成的历史影子副本实例,不读取卷级启用配置

上述两类配置实际存储在root\Microsoft\Windows\ShadowCopyWMI命名空间的卷配置类,以及绑定到对应卷的VSS计划任务中,脚本直接读取这两类数据源,输出结果与GUI展示完全对齐。

完整脚本

脚本需以管理员权限运行,输出字段包含「卷」「下次运行时间」「启用状态」,和GUI字段一一对应:

#Requires -RunAsAdministrator
function Get-VssVolumeStatus {
    # 枚举本地固定NTFS卷
    $volumes = Get-CimInstance -ClassName Win32_Volume | Where-Object {
        $_.DriveType -eq 3 -and $_.FileSystem -eq 'NTFS' -and $_.DriveLetter
    }
    # 读取VSS卷级启用配置
    $shadowVolumeConfigs = Get-CimInstance -Namespace root\Microsoft\Windows\ShadowCopy -ClassName Win32_ShadowVolume -ErrorAction SilentlyContinue
    # 枚举所有VSS关联计划任务
    $vssScheduledTasks = Get-ScheduledTask | Where-Object TaskName -match '^ShadowCopyVolume'

    foreach ($vol in $volumes) {
        $drivePath = $vol.DriveLetter + '\'
        $currentVolConfig = $shadowVolumeConfigs | Where-Object Volume -eq $vol.DeviceID
        $nextRunTime = 'Disabled'
        $enableStatus = '已禁用'

        if ($currentVolConfig.Enabled -eq $true) {
            # 匹配当前卷绑定的VSS计划任务
            $volGuid = $vol.DeviceID.TrimStart('\\?\Volume').TrimEnd('\')
            $matchedTask = $vssScheduledTasks | Where-Object TaskName -match [regex]::Escape($volGuid)
            if ($matchedTask) {
                $taskRuntimeInfo = $matchedTask | Get-ScheduledTaskInfo
                if ($taskRuntimeInfo.NextRunTime) {
                    $nextRunTime = $taskRuntimeInfo.NextRunTime.ToString('yyyy/MM/dd HH:mm:ss')
                    $enableStatus = '已启用'
                }
            }
        }

        [PSCustomObject]@{
            卷           = $drivePath
            下次运行时间 = $nextRunTime
            启用状态     = $enableStatus
        }
    }
}
# 执行输出所有卷的VSS配置
Get-VssVolumeStatus

使用说明

  • 直接在PowerShell管理员会话中运行脚本,即可输出所有本地固定NTFS卷的VSS配置,结果和GUI展示完全一致
  • 如需查询指定卷(例如C盘),可将最后一行执行语句替换为Get-VssVolumeStatus | Where-Object 卷 -eq 'C:\'
  • 未配置运行计划、已禁用VSS的卷,「下次运行时间」字段统一返回Disabled,和GUI展示逻辑完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:09:21