我试图解析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]
}
}