2017-10-05 61 views
0

是否有一種方法可以按用戶名對csv表進行排序,然後爲每個用戶排序創建時間列?Powershell - 按用戶名和創建時間對錶進行排序

我想看看我是否可以從最近的回來排序創建時間列。

我正在研究腳本以查看安全事件日誌中每個用戶的最後一次登錄。

我可以按名稱排序,但寫入的時間不是按任何順序。

我的下一個目標是顯示最近一次爲一位用戶創建的條目,而不是其他條目。

$time = (Get-Date) – (New-TimeSpan -Day 30) 
$ComputerName = $env:COMPUTERNAME 

#Delete any previously created files 
Get-ChildItem -Path "C:\PowerShellScripts\LastLogon\Results" -Recurse | 
Where-Object CreationTime -lt (Get-Date).AddDays(-0) | Remove-Item -   
ErrorAction SilentlyContinue 

$hastable = Get-WinEvent -FilterHashtable 
@{Logname='Security';ID=4624;starttime=$time} -ComputerName $ComputerName | 

? {($_.Properties[8].Value -eq '10') -and 
($_.Properties[5].Value -ne 'SYSTEM') -and 
($_.Properties[5].Value -ne 'Agvadmin') -and 
($_.Properties[5].Value -ne 'Agvance') -and 
($_.Properties[5].Value -ne 'ssi1') -and 
($_.Properties[5].Value -ne 'ssi2') -and 
($_.Properties[5].Value -ne 'ssi3') -and 
($_.Properties[5].Value -notmatch 'DWM') -and 
($_.Properties[5].Value -notmatch 'Default') -and 
($_.Properties[5].Value -notmatch 'TS6') -and 
($_.Properties[5].Value -notmatch 'DC1') -and 
($_.Properties[5].Value -notmatch 'DC1') -and 
($_.Properties[5].Value -notmatch 'SQLTELEMETRY') -and 
($_.Properties[5].Value -notmatch 'MSSQL') -and 
($_.Properties[5].Value -notmatch "$env:COMPUTERNAME") -and 
($_.Properties[5].Value -ne 'PANKAHLERSERVER$') -and 
($_.Properties[5].Value -ne 'GREKAHLERSRVR$') -and 
($_.Properties[5].Value -ne 'DIEKAHLERSERVER$') -and 
($_.Properties[5].Value -ne 'ANONYMOUS LOGON') -and 
($_.Properties[5].Value -ne 'LOCAL SERVICE') -and 
($_.Properties[5].Value -ne 'NETWORK SERVICE') -and 
($_.Properties[5].Value -ne 'ssiadmin') -and 
($_.Properties[5].Value -ne 'Administrator') 

} | 

select @{N='User';E={$_.Properties[5].Value}} , @{N='TimeCreated';E= 
{$_.TimeCreated}} , @{l="Logon Type";e={$_.Properties[8].Value}} 



$hastable.GetEnumerator()| Sort -Property User | 

Export-Csv C:\PowerShellScripts\Lastlogon\Results\LastLogon.csv - 
NoTypeInformation 


#The user count is created here 
$number = (Import-Csv C:\PowerShellScripts\Lastlogon\Results\LastLogon.csv | 
measure | % { $_.Count}) 

#The file is renamed to include computername, date, and user count 
rename-item -path C:\PowerShellScripts\Lastlogon\Results\LastLogon.csv - 
NewName 
C:\PowerShellScripts\Lastlogon\Results\LastLogon-$ComputerName-$CurrentDate- 
UserCount-$number.csv 

回答

0

實際上,您可以通過傳遞要排序的屬性的逗號分隔列表來排序多個屬性。

甚至可以使用表達式將第一個屬性按升序排序,而第二個屬性按降序排序,反之亦然。

$list | sort Age,Weight 

# Using expression 
$list | sort Age, @{'e'={$_.Weight};a=1} -Descending 

完整的示例:

$list = New-Object -TypeName System.Collections.Generic.List[Object] 

$Properties = @('Age','Weight','Number','Tag') 
For ($i=0;$i -le 1000;$i++) { 
    $item = New-Object psobject 
    foreach ($P in $Properties) { 
     Add-Member -InputObject $item -MemberType NoteProperty -Name $p -value (Get-Random -Minimum 0 -Maximum 10) 
    } 
$list.Add($item) 
} 

$list | sort Age,Weight 

# Using expression 
$list | sort Age, @{'e'={$_.Weight};a=1} -Descending 

我不知道我理解你的「下一個部分的目標」,但在我看來,你可能只想做一個Select -First 1

+0

謝謝,我會嘗試一下,看看會不會起作用。如果我選擇了-first,那麼這很有意義,但我可能必須按名稱將它們組合在一起,然後選擇每個組的第一個條目。 – RedThorn88

相關問題