从获取本地组成员解析为网络用户<username>/域



我试图解析get-localgroupmember的域然后查询到net user username/domain无需手动省略域。如果我使用bash,这将非常快,因为我想我将在这里和那里使用一些文本操作。但我不是Powershell的诗。

输出1:PS C:WINDOWS system32>get-localgroupmember管理员

ObjectClass Name                          PrincipalSource
----------- ----                          ---------------
User        DESKTOP-AMAZINGAdministrator Local
User        DESKTOP-AMAZINGhot           Local
User        DESKTOP-AMAZINGcold          MicrosoftAccount

PS C:WINDOWS system32>net user hot/domain | findstr "最后登录"(手动省略域)

Last Logon     2/1/2021 00:00:00AM

所需输出

Name   Last Logon
----   -----------
hot    Last Logon     2/1/2021 00:00:00AM

我将使用PowerShell命令获取本地用户信息:

Get-LocalGroupMember Administrators |
Where {$_.ObjectClass -eq 'User' -and $_.PrincipalSource -eq 'Local'} |
Foreach-Object {
Get-LocalUser $_.Sid | Select Name,LastLogon
}

如果您必须解析并以困难的方式执行,则有一种方法:

Get-LocalGroupMember Administrators | Where ObjectClass -eq 'User' |% {
$user = $null
# Split name at first  and return characters after the 
$name = ($_.Name -split '\',2)[1]
# Checking for local user
if ($_.PrincipalSource -eq 'Local') {
$user = net user $name
}
# checking for AD user
elseif ($_.PrincipalSource -eq 'ActiveDirectory') {
$user = net user $name /DOMAIN
}
# LastLogon only matches line that begins Last Logon
# Last Logon and proceeding spaces are removed from matched line
# Index [0] is used because -match returns an array when an array is compared
[pscustomobject]@{
Name = $name
LastLogon = ($user -match '^Last Logon' -replace '^Last Logons*')[0]
}
}

相关内容

最新更新