Я запрашиваю базу данных SCCM, чтобы проверить историю пользователей, которые вошли в компьютер.
То, что у меня есть, работает отлично, однако данных много, и я хотел бы сгруппировать их все вместе.Например, вот вывод для одного компьютера:
Это все входы одного и того же пользователя (скажем, JohnDoe123).Я хочу вместо 30 записей для Джона, 20 записей для Джейн и т. Д. Мне нужно общее количество каждого пользователя.Например:
Computer1 - JohnDoe123 - FullName - Latest time for LastConsoleUse - 500 (total number of console logons) - Latest TimeStamp - 50 000 (total minutes)
Вы понимаете, что я имею в виду?
Очевидно, что я не могу суммировать значения LastConsoleUse и TimeStamp, поэтому в идеале я хотел бы иметь только последнее значение.
Я пытаюсь ... | Group-Object -property SystemConsoleUser
, но он возвращает хеш-таблицу, которая не соответствует формату, который мне нужен:
IЯ очень запутался, когда дело доходит до манипулирования объектами внутри такого объекта, поэтому спасибо за вашу помощь!
#Hist Users SCCM
$ConnexionsUsagers = $null
$poste = "X"
$SiteCode = "X"
$SiteServer = "X"
$ResourceID_Name = (Get-WmiObject -namespace root\sms\site_$SiteCode -computer $SiteServer -query "select ResourceId,Name from SMS_R_SYSTEM where SMS_R_SYSTEM.Name LIKE '%$poste%'")
$ConnexionsUsagers += foreach ($item in $ResourceID_Name) {
$query = @"
SELECT *
FROM SMS_GH_System_SYSTEM_CONSOLE_USER
WHERE SMS_GH_System_SYSTEM_CONSOLE_USER.ResourceID
LIKE '%$($item.ResourceId)%'
"@
Get-WmiObject -Namespace root\sms\site_$SiteCode -Computer $SiteServer -Query $query |
Where-Object {$_.SystemConsoleUser -ne $null} |
Select-Object @{name='Poste';expression={$item.Name}}, SystemConsoleUser,
@{name='Nom complet';expression={Get-ADUser -Properties userprincipalname ($_.SystemConsoleUser -replace "X\\") | Select-Object -ExpandProperty userPrincipalName}},
@{name='LastConsoleUse';expression={[DateTime]::ParseExact(($_.LastConsoleUse).Split('.')[0], "yyyyMMddHHmmss", [System.Globalization.CultureInfo]::InvariantCulture)}},
NumberofConsoleLogons,
@{name='TimeStamp';expression={[DateTime]::ParseExact(($_.TimeStamp).Split('.')[0], "yyyyMMddHHmmss", [System.Globalization.CultureInfo]::InvariantCulture)}},
TotalUserConsoleMinutes
}
$ConnexionsUsagers |
Sort-Object @{expression="Poste"; Ascending=$true}, @{expression="TimeStamp"; Descending=$true} |
Out-GridView