मैंने आखिरकार एक स्क्रिप्ट लिखी जो मेरी ज़रूरतों के अनुरूप है। यह स्क्रिप्ट AD में सूचीबद्ध सभी सर्वरों को xml फ़ाइलों के लिए c: \ Windows \ System32 \ टास्क फोल्डर में 'स्कैन' करेगी। फिर यह प्रत्येक फाइल के UserID xml नोड का मूल्य लिखेगा, अंतिम CSV फ़ाइल में।
अभी तक पूर्ण नहीं है, लेकिन सभी सर्वरों के सभी कार्यों को सूचीबद्ध करने के लिए पूरी तरह से काम कर रहा है, और उन्हें चलाने के लिए किस उपयोगकर्ता खाते का उपयोग किया जाता है।
<#
.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"
}
}
}
आउटपुट आपके डेस्कटॉप पर उत्पन्न एक अल्पविराम से अलग की गई फ़ाइल है, जैसे यह:
> SRV028,CCleanerSkipUAC,administrator
> SRV029,GoogleUpdateTaskMachineCore,System
> SRV030,GoogleUpdateTaskMachineUA,System
> SRV021,BackupMailboxes,DOMAIN\administrator
> SRV021,Compress&Archive,DOMAIN\sysScheduler