powershell - Powershell - 显示作为管理员组成员的 ACTIVE 用户
问题描述
我有理由使用单行复制/粘贴脚本来显示属于管理员组成员的本地帐户,但前提是这些帐户处于活动状态。
我不能用 DOS 命令 net user 做到这一点,主要是因为 net localgroup 的输出不适合解析和所有回显到屏幕。(不过,这是此方法的单线)
echo: & echo ^>^>^> LOCAL ADMINS (Active) ^<^<^< & echo: & for /f "delims=" %i in ('net localgroup administrators') do (for /f "delims=" %j in ('net user "%i" 2^>nul ^| find /i "Account active" ^| find /i "Yes"') do (echo *** %i))
我可以在 Powershell 中使用 Get-LocalGroupMember 和 Get-LocalUser 执行此操作。但是,这不适用于所有计算机(尤其是 Windows 7,或者由于未安装 cmdlet 而升级到 Windows 10 的计算机)。(虽然这是这种方法的单线)
Write-Host "`r`n'>>> LOCAL ADMINS (Active) <<<'`r`n"; Get-LocalGroupMember Administrators ^|% { Get-LocalUser ($_.Name).split('\')[1] ^|? Enabled ^|% {Write-Host "'***'$($_.Name)"}}
我尝试使用 Get-WmiObject Win32_UserAccount 和 Win32_GroupUser 函数,无论 Windows 操作系统和年龄如何,它们似乎都可以工作,但这是我无法解决的问题。
我可以检索已启用用户的列表,但不知道如何测试管理员组的成员身份。这就是我目前所拥有的。
Get-WmiObject Win32_UserAccount ^|? {$_.Disabled -eq $false} ^|% { $_.Name }
解决方案
我认为这个 PowerShell 脚本将在 Windows 7 工作站上完成这项工作:
# Retrieve NTDomain using Win32_ComputerSystem
$ComputerDomain = ((Get-WmiObject Win32_ComputerSystem).Domain).Split(".")[0]
# Retrieve members of Administrators group using Win32_Group.Domain
$Admins = Get-WmiObject -Query "SELECT PartComponent FROM Win32_GroupUser WHERE GroupComponent=`"Win32_Group.Domain='$ENV:Computername',Name='administrators'`""
$users = @()
# cut PartComponent format : \\PC001\root\cimv2:Win32_UserAccount.Domain="PC001",Name="Administrator"
foreach ($member in $Admins) {
$partComponent = $member.PartComponent
$namespace = $partComponent.Split(":")[0]
$class = $partComponent.Split(":")[1].Split(".")[0]
$memberDomain = $partComponent.Split(":")[1].Split(".")[1].Split(",")[0].Split("`"")[1]
$memberName = $partComponent.Split(":")[1].Split(".")[1].Split(",")[1].Split("`"")[1]
$users += $class + ":" + $memberDomain + "\" + $memberName
}
#Assemblies for domain accounts
Add-Type -assembly "System.DirectoryServices.AccountManagement"
Add-Type -assembly "System.Security.Principal"
$ActivesAdmins = @()
foreach ($user in $users) {
$UserType = $User.Split(":")[0]
$UserDomain = $user.Split(":")[1].Split("\")[0]
$UserName = $user.Split("\")[1]
#Domain accounts
If (($UserType -eq "Win32_UserAccount") -and ($UserDomain -eq $ComputerDomain)) {
$ActiveUser = $null
$ActiveUser = New-Object System.Security.Principal.WindowsPrincipal("$UserName") -ErrorAction SilentlyContinue
if ($activeUser -ne $null) {$ActivesAdmins += $UserDomain + "\" + $UserName}
}
#Local accounts
ElseIf (($UserType -eq "Win32_UserAccount") -and ($UserDomain -eq $env:ComputerName)) {
$DisabledUser = $null
$DisabledUser = Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount=True" | Where-Object {$_.Name -eq "$UserName"} | ForEach-Object { $_.Disabled }
If ($DisabledUser -eq $False) {$ActivesAdmins += $UserDomain + "\" + $UserName}
}
}
Write-Host "List of Actives Admins :"
$ActivesAdmins
推荐阅读
- karate - karate-config.js 中用于登录的 callSingle 在空手道 UI 测试中无法按预期工作
- jqgrid - 将 jqGrid 中的 rowId 设置为数据库的记录 ID
- excel - 从 Firebird 查询结果中删除非标准 ASCII 字符
- javascript - array.filter() 和 array.some() 没有按预期使用 '||' (健康)状况
- angular - 有什么方法可以将 html 元素分配给 Angular 中的变量?
- r - R中的适当日期格式
- crystal-reports - Crystal Reports 11.5.10.1263 - 跟踪“数据库字段”对象的来源
- swift - 使用 Cloud Functions 访问 Firestore 中的用户数据,但如何安全地发送 UID/IDToken?
- file - 在可执行文件上模拟拖放文件?
- postgresql - 在一列 PostgeSQL 中添加多个 ForeginKey