请求修改PowerShell脚本:批量获取AD计算机本地用户组及启用状态
修改后的PowerShell脚本
# 导入ActiveDirectory模块(需提前安装RSAT工具) Import-Module ActiveDirectory # 获取AD中的计算机列表,可根据需求添加筛选条件(如指定OU范围) $computers = Get-ADComputer -Filter * -Properties Name # 定义输出CSV路径 $outputPath = "\..\KontaLokalne.csv" # 遍历每台计算机 foreach ($WKS in $computers) { $computerName = $WKS.Name Write-Host "正在处理计算机:$computerName" try { # 连接目标计算机的WinNT命名空间 $adsi = [ADSI]"WinNT://$computerName" $adsi.Children | Where-Object { $_.SchemaClassName -eq 'user' } | ForEach-Object { # 获取用户所属组并拼接为字符串 $groups = $_.Groups() | ForEach-Object { $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) } -join ',' # 获取账户启用状态:AccountDisabled为$true表示禁用,取反得到启用状态 $isEnabled = -not $_.AccountDisabled # 构造输出对象 [PSCustomObject]@{ 计算机名 = $computerName 账户名 = $_.Name 所属组 = $groups 启用状态 = if ($isEnabled) { "已启用" } else { "已禁用" } } | Export-Csv -Path $outputPath -NoClobber -Append -Encoding UTF8 -Delimiter ";" -NoTypeInformation } } catch { Write-Warning "无法访问计算机 $computerName : $_" } }
关键修改说明
- 批量获取AD计算机:通过
Get-ADComputer拉取域内计算机列表,可根据实际需求添加筛选条件(如指定OU、操作系统版本) - 新增启用状态字段:利用ADSI用户对象的
AccountDisabled属性,转换为易读的中文启用/禁用描述 - 调整输出格式:新增
计算机名字段,输出列匹配需求的计算机名;账户名;所属组,同时补充启用状态信息 - 异常处理:添加
try/catch捕获计算机不可达的情况,避免脚本中断并输出警告 - 代码优化:提前完成组拼接操作,让逻辑更清晰
内容的提问来源于stack exchange,提问作者KrzychG
相关产品推荐
相关产品推荐

