2008r2ターミナルサーバーファームにログインしているユーザーの数を監視できるように、Webインターフェイスを作成しようとしています。良い出発点となるスクリプトがあり、環境に合わせて調整しましたが、いくつか追加する必要があり、方法がわかりません。一意のログインを取得する必要があります...これが私の出発点です...
$ComputerList = "RDS1","RDS2","RDS3"
foreach ($ComputerName in $ComputerList){
$UserCount=0
$colEvents = Get-WinEvent -ComputerName $ComputerName -
LogName "Microsoft-Windows-TerminalServices-
LocalSessionManager/Operational" |
Where {$_.ID -eq "21"} |
Select -Property TimeCreated, Message
Write-Host "`nServer Date Login Time Username"
Foreach ($Event in $colEvents)
{
$EventTimeCreated = $Event.TimeCreated
$EventMessage = $Event.Message -split "`n" | Select-Object-Index "2"
$EventMessageUser = $EventMessage.Substring(6)
Write-Host "$ComputerName $EventTimeCreated $EventMessageUser"
$UserCount = $UserCount + 1
}
Write-Host "Number of Users: $UserCount"
}
…。まず最初に-一意のログインを取得する方法...次に、アクティブなログインを取得する方法、そして3番目に、最初のスクリプトを2番目のスクリプトの形式に変換する方法を教えてください。一意のログインを取得するには、明らかに、配列にその値がまだないという条件で、ログインが格納されているある種の配列が必要になります...しかし、方法がわかりません。 2つ目は、IDを、ログアウトイベントがないリストに既に存在するIDと照合することです。これを行う方法もわかりません。何か案は?私は助けに感謝します。
最初にスクリプトを読み取り可能な状態(インデント、改行)にフォーマットします
そしてそれを取り除いてデータのみを取得します。
あなたの環境があなたのプロパティの微調整を当然のこととして取っていない
## Q:\Test\2018\11\16\SF_940425.ps1
$ComputerList = "RDS1","RDS2","RDS3"
$data = ForEach ($ComputerName in $ComputerList){
$colEvents = Get-WinEvent -ComputerName $ComputerName `
-LogName "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" |
Where {$_.ID -eq "21"} | Select -Property TimeCreated, Message
Foreach ($Event in $colEvents){
New-Object PSObject -Property @{
ComputerName = $ComputerName
EventTimeCreated = $Event.TimeCreated
EventMessage = ($Event.Message -split "`n")[2]
User = $EventMessage.Substring(6)
}
}
}
$data
$data | Export-Csv '.\ServerUserList.csv' -NoTypeInformation
そして、後でツールを使用してデータの分析を行います。
しかし、最初にもっと実際のPowerShellバージョンを取得しようとします 含まれているPSv2よりも