我不确定如何在 PowerShell 中执行此操作,但我认为它不受支持。
例如:
$tasks = schtasks /query
将所有任务存储到变量中$tasks
示例输出:
Folder: \Microsoft\Windows\WindowsBackup
TaskName Next Run Time Status
======================================== ====================== ===============
ConfigNotification Disabled
属性“TaskName”不能轻易引用(即$tasks.TaskName
)
是否有其他方法可以引用变量中的 TaskName 属性$tasks
,类似于如何在 get-service cmdlet 中引用属性?
$services = gsv
$services | Where-Object { Write-Output $_.Name }
答案1
使用/fo参数调度任务将输出打印为 CSV,然后使用转换自-CSV命令。
$tasks = schtasks /query /fo CSV | ConvertFrom-CSV
然后,您可以按如下方式搜索特定任务名称
$myTask = $tasks | Where-Object {$_.TaskName -eq "My_Scheduled_Task"}
答案2
要实现您想要的功能,您需要构建一个自定义对象,并使用输出中的详细信息填充该对象schtasks
。这样您就可以实现您想要的功能。我前段时间在工作中为此做了一个项目。周日我会访问该代码,然后将其发布。
这是我构建的计划任务查询脚本,因为它是我的第一个脚本之一,它不是很漂亮,但它应该包含您需要的所有信息:
function query_tasks
{
if ($args -eq '/?')
{
Write-Output "Usage: query_tasks ComputerName taskname"
Write-Output "Task name defaults to wildcard search and can be multiple words."
Write-Output "Computer name, and task names must be included."
}
elseif ($args.length -lt 2)
{
Write-Output "Error: Must include computer name and partial task name to search for."
}
else
{
$CompName = $args[0]
$Tasks = $args[1..($args.length-1)]
$arrTasks = $(schtasks /query /v /fo csv /s $CompName)
$taskName = "`"*$Tasks*`""
$arrTask = $arrTasks -like $taskName -split '","'
$arrSchTasksAttributes = @( )
$arrSchTasksAttributes += "HostName"
$arrSchTasksAttributes += "TaskName"
$arrSchTasksAttributes += "NextRunTime"
$arrSchTasksAttributes += "Status"
$arrSchTasksAttributes += "LastRunTime"
$arrSchTasksAttributes += "LastResult"
$arrSchTasksAttributes += "Creator"
$arrSchTasksAttributes += "Schedule"
$arrSchTasksAttributes += "TaskToRun"
$arrSchTasksAttributes += "StartIn"
$arrSchTasksAttributes += "Comment"
$arrSchTasksAttributes += "ScheduledTaskState"
$arrSchTasksAttributes += "ScheduledType"
$arrSchTasksAttributes += "StartTime"
$arrSchTasksAttributes += "StartDate"
$arrSchTasksAttributes += "EndDate"
$arrSchTasksAttributes += "Days"
$arrSchTasksAttributes += "Months"
$arrSchTasksAttributes += "RunAsUser"
$arrSchTasksAttributes += "DeleteTaskIfNotRescheduled"
$arrSchTasksAttributes += "StopTaskIfRunsXHoursandXMins"
$arrSchTasksAttributes += "Repeat_Every"
$arrSchTasksAttributes += "Repeat_Until_Time"
$arrSchTasksAttributes += "Repeat_Until_Duration"
$arrSchTasksAttributes += "Repeat_StopIfStillRunning"
$arrSchTasksAttributes += "IdleTime"
$arrSchTasksAttributes += "PowerManagement"
$arrTaskObj = $null
$arrTaskObj = New-Object psobject
for ($t = 0; $t -lt $arrTask.length; $t++)
{
Add-Member -InputObject $arrTaskObj -MemberType NoteProperty `
-Name $arrSchTasksAttributes[$t] -Value $arrTask[$t]
}
$listHeaders = @{Expression={$_.HostName};Label="Host Name"}, @{Expression={$_.TaskName};Label="Task Name"}, @{Expression={$_.NextRunTime};Label="Next Run Time"}, @{Expression={$_.LastRunTime};Label="Last Run Time"}, @{Expression={$_.LastResult};Label="Last Result"}, @{Expression={$_.Status};Label="Current Status"}
$arrTaskObj | Format-List $listHeaders
}
}
它本质上向服务器查询整个计划任务列表并以数组形式接收输出。然后它在输出中搜索包含特定计划任务的行。找到后,它会生成一个搜索到的任务行数据数组(此时没有标头信息)。然后使用计划任务以数组形式返回的标头信息,构建一个自定义对象,将每条标头信息作为属性,然后用特定任务数组中的数据填充该对象。
由于对象创建的方式,您可能可以调整此脚本以允许包含多个计划任务。目前,输出是通过 $listHeaders 变量进行过滤的,但您可以删除它并只将 $arrTaskObj 对象输出到管道,这将允许您调用和访问其属性。
答案3
我在用可视化Cron这是一个类似于任务调度程序的自动化工具。它有一个用于执行 Powershell 的特定任务。有两种模式 - inprocess,允许您在 VisualCron 中输入 PS 代码,也可以链接到现有的 PS 文件。
无论哪种方式,您都可以使用 VisualCron 内置变量将信息直接传递到 Powershell 脚本。
答案4
在 Powershell/pwsh 中,使用Get-ScheduledTask
[參考] 或者Get-ScheduledTaskInfo
改为。