gpt4 book ai didi

powershell - 如何使用 PowerShell 清点计划任务

转载 作者:行者123 更新时间:2023-12-04 01:54:35 25 4
gpt4 key购买 nike

有没有人有使用 PowerShell 来清点服务器上的计划任务(包括操作)的链接或脚本?

我能够获得计划服务 com 对象和我称之为“顶级”属性(名称、状态、上次运行时间),但还想从计划任务的“操作”部分获取信息(本质上,名称计划任务及其命令行)。

例如:

$schedule = new-object -com("Schedule.Service") 
$schedule.connect()
$tasks = $schedule.getfolder("\").gettasks(0)

$tasks | select Name, LastRunTime

foreach ($t in $tasks)
{
foreach ($a in $t.Actions)
{
$a.Path
}
}

上面的代码片段在列出任务方面起作用;但是 Actions 上的循环似乎根本没有做任何事情,没有错误,也没有任何输出。

任何帮助,将不胜感激。

最佳答案

这可能与当前的答案非常相似,但我编写了一个快速脚本来帮助您前进。您当前脚本的问题在于没有 Actions任务中的属性。您需要从 comobject 提供的 xml 任务定义中提取它。以下脚本将返回一组对象,每个计划任务一个。它包括操作 如果操作是运行一个或多个命令 .这只是为了让您继续前进,因此您需要修改它以在需要时包含更多属性。

function getTasks($path) {
$out = @()

# Get root tasks
$schedule.GetFolder($path).GetTasks(0) | % {
$xml = [xml]$_.xml
$out += New-Object psobject -Property @{
"Name" = $_.Name
"Path" = $_.Path
"LastRunTime" = $_.LastRunTime
"NextRunTime" = $_.NextRunTime
"Actions" = ($xml.Task.Actions.Exec | % { "$($_.Command) $($_.Arguments)" }) -join "`n"
}
}

# Get tasks from subfolders
$schedule.GetFolder($path).GetFolders(0) | % {
$out += getTasks($_.Path)
}

#Output
$out
}

$tasks = @()

$schedule = New-Object -ComObject "Schedule.Service"
$schedule.Connect()

# Start inventory
$tasks += getTasks("\")

# Close com
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($schedule) | Out-Null
Remove-Variable schedule

# Output all tasks
$tasks

前任。产量
PS > .\Untitled1.ps1 | ? { $_.Name -eq "test" }


Actions : notepad.exe c:\test.txt
calc.exe
Path : \test
Name : test
LastRunTime : 30.12.1899 00:00:00
NextRunTime : 17.03.2013 13:36:38

关于powershell - 如何使用 PowerShell 清点计划任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15439542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com