时间:2025-10-01 13:35
人气:
作者:admin
以其他方式启动三种类型的作业(即本地、远程和通用信息模型 (CIM)/Windows Management Instrumentation (WMI))
Start-Job 启动,脚本在后台进程运行# 运行命令块
Start-Job -ScriptBlock { Get-Process } -Name MyJob
# 运行一个脚本文件
Start-Job -FilePath "C:\scripts\backup.ps1" -Name BackupJob
Invoke-Command,加 -AsJob 参数Invoke-Command -ComputerName Server01,Server02 `
-ScriptBlock { Get-Service } `
-AsJob -JobName "ServiceCheck"
用途:批量对多台服务器执行任务,例如检查服务状态、收集日志。
注意:这需要远程计算机启用 PowerShell Remoting (Enable-PSRemoting)。
Start-Job 包装。-AsJob 参数,可以直接用。CIM 示例
在后台查询本地/远程的操作系统信息。
Start-Job -ScriptBlock { Get-CimInstance -ClassName Win32_OperatingSystem }
WMI 示例
在后台通过 WMI 查询远程机器的服务。
Get-WmiObject -Class Win32_Service -ComputerName Server01 -AsJob
在上述所使用到的类型名,都可以自己去找:
# WMI
Get-WmiObject -List
# CIM
Get-CimClass
举例:
如果你用 Invoke-Command -AsJob 发到 3 台电脑:
Get-Job = 看队列Receive-Job = 拿结果Wait-Job = 等待任务完成Remove-Job = 清理任务Stop-Job = 停止任务Get-Job
Get-Job -Name TestScript
Get-Job -Id 5
状态 State 属性 很关键:
Running(正在运行)Completed(已完成)Failed(失败)Stopped(被手动终止)注意:父作业的状态会反映子作业中有没有失败。
即便 3 台机器里有 2 个成功,1 个失败 → 父作业显示 Failed。
Get-Job -Name RemoteLogs | Select-Object -ExpandProperty ChildJobsGet-Job -Name RemoteLogs -IncludeChildJobs这样你就能看到每个子作业的 独立状态、ID、Location。
常用管理命令:
Stop-Job -Name RemoteLogs Stop-Job -Id 6
Remove-Job -Name LocalDirectory
Wait-Job -Name TestScript
Receive-Job -Id 4
Receive-Job –ID 13 -Keep | Format-Table –Property Name,Length
注意:
Receive-Job 默认会“取走”结果,再次执行就读不到了。
如果要多次读取,可以加 -Keep:
Receive-Job -Id 4 -Keep
表格总结回顾:
| 命令 | 作用 |
|---|---|
Get-Job |
查看所有作业(父作业 + 状态) |
Get-Job -IncludeChildJobs |
查看子作业详情 |
Stop-Job |
停止正在运行的作业 |
Remove-Job |
删除作业对象(释放内存) |
Wait-Job |
等待作业完成(脚本控制流用) |
Receive-Job |
获取作业结果 |
一个计划作业由 三部分组成:
Start-Job -ScriptBlock { … }。New-ScheduledJobOption 创建。New-JobTrigger 创建。若要查看完整的命令列表,请运行以下命令:
Get-Command –Module ScheduledTasks
常用命令:
| Cmdlet | 说明 |
|---|---|
Register-ScheduledJob |
创建计划作业(关键命令) |
Get-ScheduledJob |
查看计划作业 |
Set-ScheduledJob |
修改作业 |
Enable-ScheduledJob / Disable-ScheduledJob |
启用/禁用作业 |
Unregister-ScheduledJob |
删除计划作业 |
Get-JobTrigger / Add-JobTrigger |
查看或添加触发器 |
Get-ScheduledJobOption / Set-ScheduledJobOption |
查看或修改选项 |
Get-Job / Receive-Job |
查看计划作业的运行结果 |
使用 New-ScheduledJobOption 可创建新的作业选项对象
此命令具有多个参数,可用于定义作业的选项,例如:
使用以下命令创建新的选项对象并将其存储在变量中:
$opt = New-ScheduledJobOption –RequireNetwork –RunElevated -WakeToRun
作业触发器定义作业何时运行。 每个作业可以有多个触发器。 使用 New-JobTrigger 命令创建触发器对象。 有五种基本类型的触发器:
例如,以下命令创建一个触发器,该触发器在当地时间每周一和周四下午 3:00 运行:
$trigger = New-JobTrigger -Weekly -DaysOfWeek Monday,Thursday -At '3:00PM'
使用 Register-ScheduledJob 可创建和注册新的计划作业。 指定以下任何参数:
若要使用 $opt 中的选项对象和 $trigger 中的触发器对象注册新作业,请使用以下示例:
$opt = New-ScheduledJobOption -WakeToRun
$trigger = New-JobTrigger -Once -At (Get-Date).AddMinutes(5)
Register-ScheduledJob -Trigger $trigger -ScheduledJobOption $opt -ScriptBlock { Dir C:\ } -MaxResultCount 5 -Name "LocalDir"
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 LocalDir 1 Dir C:\ True
Windows PowerShell 在 Windows“任务计划程序”中注册生成的作业,并在磁盘上创建作业定义。 作业定义是存储在您的用户配置文件文件夹中的 XML 文件,路径为 \AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs。
可以运行 Get-ScheduledJob 来查看本地计算机上的计划作业列表。
如果知道计划作业的名称,可以使用 Get-JobTrigger 和 –Name 参数来检索此作业的触发器列表。
步骤 1:定义触发器
每天上午 9 点运行
$trigger = New-JobTrigger -Daily -At 9am
步骤 2:定义选项
管理员权限运行,即使在笔记本电池模式下也能继续(参数:ContinueIfGoingOnBattery)
$options = New-ScheduledJobOption -RunElevated -ContinueIfGoingOnBattery
步骤 3:注册作业
创建一个每天 9 点运行的作业,把 Get-ChildItem 的结果保存到磁盘
Register-ScheduledJob -Name "DailyDirJob" -ScriptBlock { Get-ChildItem C:\ -Recurse } -Trigger $trigger -ScheduledJobOption $options
查看作业定义
Get-ScheduledJob
查看触发器和选项
Get-JobTrigger -Name DailyDirJob
Get-ScheduledJobOption -Name DailyDirJob
手动运行一次
Start-Job -DefinitionName DailyDirJob
查看结果
Get-Job -Name DailyDirJob
Receive-Job -Name DailyDirJob -Keep
删除作业
Unregister-ScheduledJob -Name DailyDirJob
计划作业在 任务计划程序 中存储在:
Microsoft\Windows\PowerShell\ScheduledJobs
在任务计划程序 GUI 里能看到对应的任务:
注意:如果你在任务计划程序 GUI 里修改了触发器或条件,这些修改会影响后续的所有运行。
PSScheduledJob:专门给 PowerShell 用的“计划作业”,结果保存到 PowerShell 自己的输出存储中,可以 Receive-Job。
ScheduledTasks:Windows 原生任务计划程序管理模块,可以操作所有任务(包括 PowerShell 以外的任务)。
本文来自博客园,作者:竹等寒,转载请注明原文链接。