Ich habe endlich ein Skript geschrieben, das meinen Bedürfnissen entspricht. Dieses Skript "scannt" alle in AD aufgeführten Server und durchsucht den Ordner c: \ Windows \ System32 \ task nach XML-Dateien. Dann schreibt es den Wert des UserID-XML-Knotens jeder Datei in die endgültige CSV-Datei.
Noch nicht perfekt, aber es funktioniert vollständig, um alle Aufgaben aller Server aufzulisten und zu protokollieren, mit welchem Benutzerkonto sie ausgeführt werden.
<# .Synopsis PowerShell script to list all Scheduled Tasks and the User ID .DESCRIPTION This script scan the content of the c:\Windows\System32\tasks and search the UserID XML value. The output of the script is a comma-separated log file containing the Computername, Task name, UserID. #> Import-Module ActiveDirectory $VerbosePreference = "continue" $list = (Get-ADComputer -LDAPFilter "(&(objectcategory=computer)(OperatingSystem=*server*))").Name Write-Verbose -Message "Trying to query $($list.count) servers found in AD" $logfilepath = "$home\Desktop\TasksLog.csv" $ErrorActionPreference = "SilentlyContinue" foreach ($computername in $list) { $path = "\\" + $computername + "\c$\Windows\System32\Tasks" $tasks = Get-ChildItem -Path $path -File if ($tasks) { Write-Verbose -Message "I found $($tasks.count) tasks for $computername" } foreach ($item in $tasks) { $AbsolutePath = $path + "\" + $item.Name $task = [xml] (Get-Content $AbsolutePath) [STRING]$check = $task.Task.Principals.Principal.UserId if ($task.Task.Principals.Principal.UserId) { Write-Verbose -Message "Writing the log file with values for $computername" Add-content -path $logfilepath -Value "$computername,$item,$check" } } }
Die Ausgabe ist eine durch Kommas getrennte Datei, die auf Ihrem Desktop generiert wird, wie diese:
> SRV028,CCleanerSkipUAC,administrator > SRV029,GoogleUpdateTaskMachineCore,System > SRV030,GoogleUpdateTaskMachineUA,System > SRV021,BackupMailboxes,DOMAIN\administrator > SRV021,Compress&Archive,DOMAIN\sysScheduler