Here is another script which goes through each my Windows Servers and list out scheduled tasks and the credentials use to run them. I needed to know what are the scheduled tasks running on each server and most importantly what accounts are used to run them.
Initially, I was looking at using the Win32_ScheduledJob WMI class. However, it does not work well for me because it only represents a job/task created with the AT command. Job/Task created with the Scheduled Task Wizard from the Control Panel cannot be found in this class. Check http://msdn.microsoft.com/en-us/library/windows/desktop/aa394399(v=vs.85).aspx for more information.
So with some searching, I found this script http://msdn.microsoft.com/en-us/library/windows/desktop/aa446865%28v=vs.85%29.aspx which display task name and status. I modified the script to get what I needed .
On Error Resume Next Dim rootFolder Dim taskCollection Dim numberOfTasks Dim taskDefinition Dim principal Dim registeredTask Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objServerFile = objFSO.OpenTextFile("servers.txt", ForReading) strFileName = "ScheduleTasks.txt" Set objFileResult = objFSO.OpenTextFile(strFileName, 8, True, 0) objFileResult.WriteLine "Server Name" + vbTab + "Service Account" + vbTab + "Task Name" Do Until objServerFile.AtEndOfStream strServerName = objServerFile.Readline ' Create the TaskService object. Set service = CreateObject("Schedule.Service") call service.Connect(strServerName) Wscript.echo "Connecting to " & strServerName 'Catch the error connecting to the server If Err.Number <> 0 Then Wscript.echo strServerName + vbTab + "Error Connecting" + vbTab + Err.Description objFileResult.WriteLine strServerName + vbTab + "Error Connecting" + vbTab + Err.Description Err.Clear Else ' Get the task folder that contains the tasks. Set rootFolder = service.GetFolder("\") Set taskCollection = rootFolder.GetTasks(0) numberOfTasks = taskCollection.Count If numberOfTasks = 0 Then Wscript.Echo "No tasks are registered." objFileResult.WriteLine strServerName + vbTab + "None" + vbTab + "No Task" Else WScript.Echo "Number of tasks registered: " & numberOfTasks 'Loop trhough the task collection to get the task name and account used to run the task For Each registeredTask In taskCollection Set taskDefinition = registeredTask.Definition Set principal = taskDefinition.Principal WScript.Echo "Task Name: " & registeredTask.Name Wscript.Echo "User Name: " & principal.UserId objFileResult.WriteLine strServerName + vbTab + principal.UserId + vbTab + registeredTask.Name Next End If End If Loop 'Clean up objFileResult.Close objServerFile.Close |
The script will read from a file servers.txt to get the list of servers you want to go through.
Example of servers.txt:
Example of servers.txt:
servers.txt |
deServer1 deServer2 |
Open a command prompt with an account that has administrative rights over the servers that you want to go through. Run the script using cscript.exe.
C:\scripts>cscript ScheduleTasksInventory.vbs Microsoft (R) Windows Script Host Version 5.8 Copyright (C) Microsoft Corporation. All rights reserved. Connecting to deServer1 Number of tasks registered: 3 Task Name: At1 User Name: Task Name: WebTest User Name: deInfoTech\WebAdmin Task Name: Note User Name: SYSTEM Connecting to deServer2 Number of tasks registered: 1 Task Name: movetoBackup User Name: SYSTEM |
The results will be written to ScheduleTasks.txt which is tab delimited. Below is a sample of the results opened in Excel.
Server Name | Service Account | Task Name |
deServer1 | At1 | |
deServer1 | deInfoTech\WebAdmin | WebTest |
deServer1 | SYSTEM | Note |
deServer2 | SYSTEM | movetoBackup |
Using the Schedule.Service object, it does list out the task created using AT Command but the account used to run the task is missing. Nevertheless, this does not seem to be a problem because it looks like tasks created using AT Command are running using the NT Authority\System account. Again, this has saved me the hassle and time needed to go through each server manually.
No comments:
Post a Comment