Die Citrix Studio Konsole ist bzgl. der Abfrage der Einträge aus der Configuration Logging Datenbank leider relativ limitiert, man kann das Suchergebnis lediglich auf eine bestimmte Anzahl von Tage
einschränken, und es gibt eine Freitextsuche die jedoch nur im oberen Fenster mit der Zusammenfassung suchen kann, jedoch keine Treffer liefert auf Suchwörter die im unteren Detail Fenster vorkommen. Dies ist vor allem dann ärgerlich, wenn man Aktionen gegen viele Maschinen durchführt hat, und hierfür nur eine zusammenfassender Eintrag ins obere Log geschrieben wurde, und man nach den Maschinennamen nicht suche kann, das dieser als Detail im Log versteckt. Die Problematik ist von Citrix auch in folgendem KB Artikel beschrieben: https://support.citrix.com/article/CTX138132
Wer andere Abfragen machen will also jene die via Citrix Studio möglich sind kann dies mittels PowerShell machen. Die Befehle hierzu lauten Get-LogHighLevelOperation und Get-LogLowLevelOperation, wobei der erstgenannte Befehl für die Einträge der Zusammenfassung (oberes Fenster im Studio) und der zweite Befehl für die Details (unteres Fenster)
Diese und weiter Befehle zum Configuration Logging sind im SDK unter folgender URL beschrieben:
https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-sdk/en/1808/ConfigurationLogging/about_LogConfigurationLoggingSnapin/
Wichtig zu wissen ist, dass beide Befehle einen „-Filter“ Parameter unterstützen, der auch genutzt werden sollte um die Abfragen effektiv zu machen. Eine Abfrage ohne -Filter Parameter und späteres filtern mittels z.B. Where-Object empfiehlt sich nicht, da ineffektiv vor allem bei größerer Datenmenge. Sollte man mehr wie 256 Einträge als Ergebnis erwarten muss man auch den Parameter -MaxRecordCount mit einem entsprechenden Wert nutzen.
Nun genug der Vorworte, hier nur ein paar PowerShell Beispiele für entsprechende Abfragen:
# Alle Einträge des High & Low Level Log einer bestimmten Zeitspanne auflisten:
Get-LogHighLevelOperation -Filter{ StartTime -ge "2022-01-01 00:00:00" -and EndTime -le "2022-12-31 23:59:59"} | Sort-Object StartTime | Format-Table StartTime,User,Text
Get-LogLowLevelOperation -Filter{ StartTime -ge "2022-01-01 00:00:00" -and EndTime -le "2022-12-31 23:59:59"} | Sort-Object StartTime | Format-Table StartTime,User,Text
# Alle Einträge des High & Low Level Log die von einem bestimmten Benutzer durchgeführt wurden auflisten:
Get-LogHighLevelOperation -User "MeinBenutzer" | Sort-Object StartTime | Format-Table StartTime,User,Text
Get-LogLowLevelOperation -User "MeinBenutzer" | Sort-Object StartTime | Format-Table StartTime,User,Text
# Textfeld aller Low Level Einträge nach einem Suchwort wie z.B. einem Rechnernamen durchsuchen, als Suchwort kann ein beliebiger Text verwendet werden, wie Machinenname, Benutzername, Aktionen wie Maintenance Mode, etc.
Get-LogHighLevelOperation -Filter { Text -like "*MeinSuchwort*"} | Sort-Object StartTime | Format-Table StartTime,User,Text
Get-LogLowLevelOperation -Filter { Text -like "*MeinSuchwort*"} | Sort-Object StartTime | Format-Table StartTime,User,Text
# Abfrage des High Level Log mit Suchwort und aber einer Startzeit, danach zugehörigem Low Level Log Eintrag mit weiteren Details abfragen und ausgeben:
$HighLevelResults = Get-LogHighLevelOperation -Filter { StartTime -ge "2022-01-01 00:00:00" -and Text -like "*MeinSuchwort*"}
foreach ($HighLevelResult in $HighLevelResults)
{
Write-host $HighLevelResult.StartTime $HighLevelResult.User $HighLevelResult.Text -ForegroundColor Yellow
$Details = (Get-LogLowLevelOperation -HighLevelOperationId $HighLevelResult.Id).Details
foreach ($Detail in $Details)
{
Write-host $Detail.StartTime $HighLevelResult.User $Detail.Text -ForegroundColor DarkYellow
}
}
# Beispielhafter Configuration Logging Export als CSV Datei
Export-LogReportCsv -OutputFile "C:\temp\Resport.csv" -StartDateRange "2022-01-01 00:00"
# Beispielhafter Configuration Logging Export als HTML Report, wobei die Summary.Html das High Level und die Details.Html das Low Level darstellt.
Export-LogReportHtml -OutputDirectory "c:\temp" -StartDateRange "2022-01-01 00:00"