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

PowerShell脚本需求:检查SID对应用户并删除其UPD

解决方案

一、核心改进方向

  1. 精准提取SID:用正则表达式替代Trim操作,避免因字符匹配逻辑缺陷导致的SID截取错误
  2. 直接通过SID验证AD用户:无需转换为用户名,跳过域名裁剪步骤,直接利用SID完成AD用户的存在性与状态校验

二、完整脚本实现

# 指定UPD存储路径
$updStoragePath = "C:\updtest"

# 获取所有符合命名规则的UPD文件
$updFiles = Get-ChildItem -Path $updStoragePath -Filter "UVHD-*.vhdx" -Force

foreach ($file in $updFiles) {
    # 从文件名中提取SID(匹配UVHD-<SID>.vhdx格式)
    $sidMatchResult = [regex]::Match($file.Name, '^UVHD-(.*)\.vhdx$')
    if (-not $sidMatchResult.Success) {
        Write-Warning "跳过不符合UPD命名规范的文件:$($file.Name)"
        continue
    }
    $targetSid = $sidMatchResult.Groups[1].Value

    # 直接通过SID查询AD用户,不存在则返回$null
    $adUser = Get-ADUser -Identity $targetSid -Properties Enabled -ErrorAction SilentlyContinue

    # 判断是否需要删除UPD:用户不存在,或用户已被禁用
    if (-not $adUser -or $adUser.Enabled -eq $false) {
        try {
            # 执行删除操作(添加-WhatIf参数可预览删除列表,确认后再移除该参数)
            Remove-Item -Path $file.FullName -Force -ErrorAction Stop
            Write-Host "已清理UPD:$($file.Name),对应SID:$targetSid"
        } catch {
            Write-Error "删除UPD失败:$($file.Name),错误信息:$_"
        }
    } else {
        Write-Host "保留UPD:$($file.Name),用户$($adUser.SamAccountName)处于启用状态"
    }
}

三、关键细节说明

  • 正则提取SID:^UVHD-(.*)\.vhdx$严格匹配UPD的命名规则,精准截取中间的SID部分,彻底解决Trim因字符重复、顺序问题导致的截取错误
  • SID直接查询AD:Get-ADUser -Identity $targetSid支持直接传入SID作为查询条件,无需转换为NTAccount格式,完全规避域名裁剪的麻烦
  • 安全校验逻辑:通过-ErrorAction SilentlyContinue处理SID不存在的场景,直接读取$adUser.Enabled判断用户状态,逻辑清晰可靠
  • 预览删除功能:在Remove-Item后添加-WhatIf参数,可以先查看待删除文件列表,确认无误后再执行实际删除操作,降低误删风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:55:22