У нас одновременно подключено около 12-14 серверов Win200 [3,8] (некоторые виртуальные машины временные). Большинство из них запускают некоторые запланированные задачи. Как я могу получить список всех запланированных задач, запущенных на каждом сервере, и, что более важно, пользователя домена, от имени которого они работают? Мы, конечно, могли бы войти на каждый сервер и спросить, но мне интересно, есть ли какая-нибудь PowerShell или другая система для этого (или что-то в Active Directory?)
Приятно было бы, чтобы это работало и на наших рабочих столах с Windows XP ... Не требование, а скорее к сведению. Спасибо!
Schtasks - ваш друг для этого - AT старый и (SFAIK) не понимает задачи, созданные с помощью schtasks. К сожалению, объект WMI Win32_ScheduledTask основан на AT, иначе он идеально подошел бы для этого.
К сожалению, ни AT, ни schtasks не сообщают о пользователе, от имени которого выполняется задание. Вероятно, где-то есть COM-объект, который позволяет вам это сделать; может быть, вы могли бы спросить о stackoverflow?
Если вы хотите написать сценарий, вы, вероятно, сделаете что-то вроде этого:
$servers = 'server1','server2','server3'
$allTasks = @()
$servers | %{
$data = schtasks /query /S $_ /fo list
# Data looks like this:
# <blank line>
# HostName: [SERVER]
# TaskName: [TASK NAME]
# Next Run Time: 12:00:00 PM, 5/9/2009
# Status: [BLANK or SOME ERROR]
foreach ($line in $data){
$blob=""|select Host, Task, Next, Status
[void]$foreach.MoveNext(); $l = $foreach.Current.length;
$blob.Host = $foreach.current.substring(15, $l-15)
[void]$foreach.MoveNext(); $l = $foreach.Current.length;
$blob.Task = $foreach.current.substring(15, $l-15)
[void]$foreach.MoveNext(); $l = $foreach.Current.length;
$blob.Next = $foreach.current.substring(15, $l-15)
[void]$foreach.MoveNext(); $l = $foreach.Current.length;
$blob.Status = $foreach.current.substring(15, $l-15)
$allTasks += $blob
}
}
$allTasks|format-table
Это превратилось в эссе злого кода - было бы проще использовать параметр / FO csv для сброса в текстовый файл, используя import-csv для возврата данных в PS, но в этом случае вы потеряете имя сервера. Так что вместо этого вы можете немного похвастаться и создавать собственные объекты с помощью перечислителя foreach. Вызов MoveNext перемещает вас к следующему элементу в списке, поэтому вы пропускаете первую пустую строку вывода, а затем берете каждую из следующих 4 строк и превращаете их во что-то полезное.
Встроенный планировщик задач должен поддерживать подключение к удаленному компьютеру (как и большинство инструментов Windows) и управлять задачами удаленного компьютера (на самом деле не пробовал его в XP, но Microsoft, кажется, говорит, что должна).
В по команде который обрабатывает и предположительно перечисляет запланированные задачи, также может быть предоставлен удаленному компьютеру для подключения. Поскольку это консольная команда, было бы легко написать сценарий для подключения к списку компьютеров и отображения всех задач. Теоретически все равно ^^