Powershell 管理 后台/计划 作业(六)

news/2025/10/1 13:39:36/文章来源:https://www.cnblogs.com/dhan/p/19122391

目录
  • 管理 后台/计划 作业
    • 后台作业
      • 本地作业
      • 远程作业
      • CIM / WMI 作业
      • 作业的管理
        • 检索作业
        • 查看子作业
        • 简单案例
    • 计划作业
      • 作业选项
      • 作业触发器
      • 创建和注册
      • 使用流程
      • 查看与管理
      • 与任务计划程序的关系
      • 区分 PSScheduledJob vs ScheduledTasks 模块

管理 后台/计划 作业

后台作业

以其他方式启动三种类型的作业(即本地、远程和通用信息模型 (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)。

CIM / WMI 作业

  • 运行位置:通过 WMI/CIM 通道执行命令(不依赖 PS Remoting)。
  • 关键点
    • CIM 命令自身 没有 -AsJob 参数,所以要用 Start-Job 包装。
    • WMI 命令(Get-WmiObject)有 -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

作业的管理

  • 父作业 (Parent Job)
    • 顶级容器,代表整个作业。
    • 里面会有一个或多个子作业。
  • 子作业 (Child Job)
    • 每台计算机对应一个子作业。
    • 本地作业 = 1 个子作业。
    • 远程作业 / WMI 作业 = 每个目标计算机 1 个子作业。

举例:
如果你用 Invoke-Command -AsJob 发到 3 台电脑:

  • 父作业 1 个
  • 子作业 3 个(分别对应三台远程机)

  • Get-Job = 看队列
  • Receive-Job = 拿结果
  • Wait-Job = 等待任务完成
  • Remove-Job = 清理任务
  • Stop-Job = 停止任务

检索作业

  • 列出所有作业
Get-Job
  • 按名称找作业
Get-Job -Name TestScript
  • 按 ID 找作业
Get-Job -Id 5

状态 State 属性 很关键:

  • Running(正在运行)
  • Completed(已完成)
  • Failed(失败)
  • Stopped(被手动终止)

注意:父作业的状态会反映子作业中有没有失败。
即便 3 台机器里有 2 个成功,1 个失败 → 父作业显示 Failed


查看子作业

  • 展开 ChildJobs 属性
    Get-Job -Name RemoteLogs | Select-Object -ExpandProperty ChildJobs
  • 更直观的参数 (PowerShell 3.0+)
    Get-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
  • 检索正在执行的任务的结果
    指定 –Keep,否则后续再读取就读取不到了
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 获取作业结果

计划作业

一个计划作业由 三部分组成:

  1. 作业 (Job):要运行的命令或脚本。
    • 类似于 Start-Job -ScriptBlock { … }
  2. 作业选项 (Job Options):运行的附加条件。
    • 比如:是否需要凭据、网络可用性要求、最大运行时间等。
    • New-ScheduledJobOption 创建。
  3. 作业触发器 (Job Triggers):定义什么时候运行。
    • 比如:每天 9 点运行,或每周一运行,或只运行一次。
    • 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 可创建新的作业选项对象

此命令具有多个参数,可用于定义作业的选项,例如:

  • –HideInTaskScheduler,阻止作业在“任务计划程序”中显示。 如果未包括此选项,最终作业将在“任务计划程序”图形用户界面 (GUI) 中显示。
  • –RunElevated,将作业配置为在提升的权限下运行。
  • –WakeToRun,在作业计划运行时唤醒计算机。
    使用其他参数来配置在计算机空闲时运行的作业和其他选项。 许多参数与“任务计划程序”GUI 中的选项对应。

使用以下命令创建新的选项对象并将其存储在变量中:

$opt = New-ScheduledJobOption –RequireNetwork –RunElevated -WakeToRun

作业触发器

作业触发器定义作业何时运行。 每个作业可以有多个触发器。 使用 New-JobTrigger 命令创建触发器对象。 有五种基本类型的触发器:

  • –Once 指定只运行一次的作业。 还可以指定 –RandomDelay,并且必须指定 –At 参数来定义作业何时运行。 此参数接受 System.DateTime 对象或可解释为日期的字符串。
  • –Weekly 指定每周运行的作业。 可指定 –RandomDelay,并且必须同时指定 –At 和 –DaysOfWeek 参数。 –At 采用日期和时间来定义作业何时运行。 –DaysOfWeek 采用一周中的某一天或多天来运行作业。 通常会用 –At 来指定时间并使用 –DaysOfWeek 定义作业应该运行的天数。
  • –Daily 指定每天运行的作业。 必须指定 –At 并指定作业何时运行。 还可以指定 –RandomDelay。
  • –AtLogOn 指定用户登录时运行的作业。 此类作业类似于登录脚本,不同之处在于它是在本地而非在域中定义。 可指定 –User 来限制触发作业的用户帐户,并指定 –RandomDelay 来添加随机延迟。
  • AtStartUp 与 –AtLogOn 类似,不同之处在于它在计算机启动时运行作业。 这通常会在用户登录前运行作业。

例如,以下命令创建一个触发器,该触发器在当地时间每周一和周四下午 3:00 运行:

$trigger = New-JobTrigger -Weekly -DaysOfWeek Monday,Thursday -At '3:00PM'

创建和注册

使用 Register-ScheduledJob 可创建和注册新的计划作业。 指定以下任何参数:

  • –Name 是必需的,它指定作业的显示名称。
  • –ScriptBlock 是必需的,它指定作业运行的一个或多个命令。 还可以指定 –FilePath 并提供作业将运行的 Windows PowerShell 脚本文件的路径和名称。
  • –Credential 是可选的,它指定将用于运行作业的用户帐户。
  • –InitializationScript 接受可选的脚本块。 此脚本块中的一个或多个命令将在作业开始之前运行。
  • –MaxResultCount 是可选的,它指定要存储在磁盘上的最大结果集数。 达到此数量后,shell 会删除旧结果,用于为新结果腾出空间。 -MaxResultCount 参数的默认值为 32。
  • –ScheduledJobOption 接受作业选项对象。
  • –Trigger 接受作业触发器对象。

若要使用 $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 vs ScheduledTasks 模块

  • PSScheduledJob:专门给 PowerShell 用的“计划作业”,结果保存到 PowerShell 自己的输出存储中,可以 Receive-Job

  • ScheduledTasks:Windows 原生任务计划程序管理模块,可以操作所有任务(包括 PowerShell 以外的任务)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【stm32】bash自动配置buildenv - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

java17及以上版本如何抵御TemplatesImpl注入

最近有一篇写的很好的关于java17反序列化绕过模块化的文章:https://mp.weixin.qq.com/s/DrUUAJaLig_RtXZWaAm1IQ 关于本篇的方式方法也比较传统,直接jep290在java运行时增加命令行参数: -Djdk.serialFilter=!com.su…

详细介绍:【C++实战(53)】C++11线程库:开启多线程编程新世界

详细介绍:【C++实战(53)】C++11线程库:开启多线程编程新世界pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

wordpress让小工具支持简码汕头百度seo在哪里

2006-2023年各地级市债务余额数据 1、时间:2006-2023年 2、来源:整理自wind 3、指标:地区、地方政府债-债券数量(只)、地方政府债-债券余额(亿)、地方政府债-债券余额占比(%)、城投债-债券数量(只)、城投债-债券余额(亿)、城投债-债券余额…

将图片某个区域批量填充白色(jsx代码)

// 定义源文件夹和目标文件夹路径 var sourceFolderPath = "C:/Users/***/Desktop/拆分/"; var destFolderPath = "C:/Users/***/Desktop/结果/";// 定义要填充的区域坐标 (x, y, 宽度, 高度) var…

青岛做网站哪个公司好网站建设报告论文

电影《楚门的世界》中描述过这样的故事:楚门这个快乐单纯的青年,一直以为自己是平凡小镇上普通的保险推销员。直到有一天他发现这世界上的一切都是为他精心安排的。他会遇到谁、在他身上将要发生什么事件,都是按照剧本被人操纵的。甚至连他的…

详细介绍:四数之和_优选算法(C++)双指针法总结

详细介绍:四数之和_优选算法(C++)双指针法总结pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

网站建设 嘉定宣传片制作公司前景

内存操作命令 直接对DRAM进行读写的操作,uboot常用的内存操作命令有md,nm,mm,mw,cp和cmp. md命令: 显示内存值 # md md - memory display Usage: md [.b, .w, .l, .q] address [# of objects] b:1个字节 byte w:2个字节 world l:4个字节 long of objects 以word 为单位的1…

《初等数论(第四版,北京大学出版社,潘承洞,潘承彪著)》阅读笔记+心得

I、整除理论 一、自然数与整数 这里的自然数定义和各种规律以及反证法的定义就不再赘述,我们从归纳法开始讲起。 1.归纳原理 归纳原理: 设 S 是 N 的一个子集,满足条件: (i) \(1 \in S\) (ii) \(n \in S\),那么有…

完整教程:Ansible Playbook

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

免费招聘的网站自己的网站什么做优化

我的施工之路Python 绘图入门这是施工系列第18篇,同时也进入到一个新的阶段:Python绘图篇。作为绘图模块的第一篇,与大家一起过过最基本的Python绘图原理。掌握基本的绘图原理很有必要,各个常用绘图库的原理基本都是相通的。所以了…

做企业云网站的企业邮箱丰都网站建设公司

Web页面中的特殊效果,如菜单效果,对话框效果都需要通过定位属性来实现。定位样式position属性可以控制元素的定位类型position属性值可以为sataic、fixed、absolute、relativeposition属性的语法结构- position:value;定位属性static默认值。没有定位&am…

深圳做分销网站的公司大学生心里健康网站设计与建设

深入理解Linux守护进程Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的。守护进程是生存期长的…

完整教程:Word和WPS文字中的自动编号和文字间距过大怎么办?

完整教程:Word和WPS文字中的自动编号和文字间距过大怎么办?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

没有网站怎样做外贸wordpress文章换行符

前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条、第三条……一直到最后一条语句,这称为顺序结构。 但是对于很多情况,顺序结构的代码是远远不够的,这时我们就要使用判断语句即if else语句。 …

珠海哪里学网站开发拓者设计吧官网app

计算机专业毕业后大致的工作方向是软、硬、网、图 四大类 尤其以软件、网络为现今的首选 从岗位上分,又可以分为技术道路、营销道路两大方向 if 你选择作技术,then 从现在开始,牢记: 天道酬勤!!&#xff…

制作网站首先做的工作重庆网站排名优化教程

系统配置:Windows XP 32位R 3.1.1一、安装RMySQL:1,安装RTools并配置环境变量:我的电脑——属性——高级——环境变量,在系统变量一栏中选择PATH,点击编辑,在后面添加RTools的路径(如:D:\Rtools\bin;D:\Rtools\gcc-4.6.3\bin;D:\R…

做网站需要购买服务器吗wordpress 果酱小程序

13 集合 实现方法时,不同的数据结构会导致性能有很大差异。 13.1 集合接口 Java集合类库将接口(interface)与实现(implementation)分离。 可以使用接口类型存放集合的应用,一旦改变了想法,可…

NOIP2025模拟赛28

T1 T2 T3 T4\(\color{#52C41A} 普及+/提高\) \(\color {#3498DB} 提高+/省选-\) \(\color {#3498DB} 提高+/省选-\) \(\color{#9D3DCF} 省选/NOI-\)参赛网址:https://oj.33dai.cn/d/TYOI/contest/68a2efb9c5d9c2f14c2…