获取本地LA组活跃成员的PowerShell脚本无数据问题求助
PowerShell脚本问题:无法获取本地组成员数据
我是PowerShell新手,现有一份记事本格式的LA组列表(示例:LA-AAAAAA、LA-BBBBB、L-CCCCCC),需要获取这些组中的所有活跃用户。LA-AAAAA这类组以服务器名AAAAA命名,本质是获取拥有服务器访问权限的用户(加入LA组即拥有权限)。我尝试了下方的PowerShell脚本,但未返回成员数据:导出文件仅显示LA组名称,无用户列表,恳请技术指导。
$logtext = $null $datenow = get-date -Format "dd-MM-yyyy" New-PSDrive -Name "R" -PSProvider "FileSystem" -Root "**Path**" $LogfileName = "LA-group-members_"+ $datenow +"_4.txt" $Logfile = "R:\Logs\$LogfileName" $ServerList = Import-Csv **PATH** get-date *>> $Logfile foreach ($Server in $ServerList){ $LaGroup = "LA-" + $Server.ServerName $logtext += "`n" $logtext += "$LaGroup" $logtext += "`n" $logtext += "---------------------------------------`n" $Members = Get-LocalGroupMember #$LaGroup foreach ($Member in $Members){ $logtext += $Member.name $logtext += "`n" } $logtext += "=======================================`n" } #Write variable data to logfile $logtext *>> $Logfile Remove-PSDrive -Name "R"
问题排查与修复方案
核心问题
脚本中Get-LocalGroupMember的目标组参数被注释掉(#$LaGroup),导致命令未指定要查询的组,自然无法返回对应成员数据。
修复后的完整脚本
$logtext = $null $datenow = Get-Date -Format "dd-MM-yyyy" # 替换**Path**为实际网络共享路径 New-PSDrive -Name "R" -PSProvider "FileSystem" -Root "**Path**" $LogfileName = "LA-group-members_"+ $datenow +"_4.txt" $Logfile = "R:\Logs\$LogfileName" # 替换**PATH**为实际CSV文件路径,确保CSV首列是ServerName $ServerList = Import-Csv "**PATH**" Get-Date *>> $Logfile foreach ($Server in $ServerList){ $LaGroup = "LA-" + $Server.ServerName $logtext += "`n" $logtext += "$LaGroup" $logtext += "`n" $logtext += "---------------------------------------`n" try { # 传入目标组参数,取消注释 $Members = Get-LocalGroupMember -Group $LaGroup foreach ($Member in $Members){ # 追加成员类型(用户/组)便于区分 $logtext += "$($Member.Name) [$($Member.ObjectClass)]" $logtext += "`n" } } catch { # 捕获组不存在或权限不足的错误,避免脚本中断 $logtext += "错误:无法访问组 $LaGroup - $($_.Exception.Message)`n" } $logtext += "=======================================`n" } # 写入日志文件 $logtext *>> $Logfile Remove-PSDrive -Name "R"
额外注意事项
- CSV格式校验:确保你的记事本(CSV文件)首行是
ServerName,后续每行是对应服务器名(如AAAAAA、BBBBBB) - 权限要求:运行脚本的账号必须拥有查询目标机器本地组的权限
- 远程服务器适配:如果LA组在远程服务器上,需改用远程查询,示例:
# 替换原$Members行,远程查询指定服务器的组 $Members = Invoke-Command -ComputerName $Server.ServerName -ScriptBlock { Get-LocalGroupMember -Group $using:LaGroup }
内容的提问来源于stack exchange,提问作者Noorullah Shakerullah
相关产品推荐
相关产品推荐

