我正在尝试查找名称中包含某种模式的计划任务,就我而言,计划任务的名称中应该具有此模式"ServiceNow"。为此,我正在使用Get-ScheduledTask
命令,但此命令在Windows Server 2008 R2中失败。
$taskPattern = "ServiceNow"
$taskDetails = Get-ScheduledTask | Where-Object {$_.TaskName -match $taskPattern }
$taskName = $taskDetails.TaskName
此脚本失败并显示错误:
"Get-ScheduledTask:"Get-ScheduledTask"一词不被识别为 cmdlet、函数、脚本文件或可操作程序的名称。 检查名称的拼写,或者如果包含路径,请验证 路径是正确的,再试一次。
然后我尝试了这种方法,它给了我"(任务名称日期和时间状态(",但我不知道如何仅从其输出中提取任务名称。
$taskPattern = "ServiceNow"
$taskExists = schtasks /query | select-string -patt $taskPattern
$taskExists
任何人都可以告诉我如何通过仅提取实际的任务名称来使其在Windows Server 2008 R2中工作? 提前致谢
您无法在Windows2008 R2上获得Get-ScheduledTask
,因为它是为Windows 2012引入的,没有人向后移植它。 有关更多信息,请参阅github上的链接。
最能描述情况的评论是:
嗨@dronkoff - PS 4.0 支持此模块。然而, 问题不在PowerShell版本中。问题是 未生成此资源所依赖的计划任务模块 到 Windows Server 2008R2 中。它最初包含在Windows Server中。 2012年。
许多PowerShell模块都是这种情况:它们缺失。 从旧版本的Windows(例如网络(。在奇数中 偶尔有一个简单的解决方法。但是在这种情况下转换 使用Schtasks的资源.exe如果没有 完全重写,可能会导致一些真正的东西 不稳定和错误(更不用说会出现的问题 Schtasks的不同本地化版本(。我真的看不到这个 不幸发生(除非社区中的其他人有 关于如何做到这一点的一些想法(。
但你是对的,这应该提到 Windows Server 当前不支持 2008R2。
解决方法
解决方法是将schtask
与正确的开关一起使用。
如果你把它放在Microsoft
文件夹中,就像我在示例中一样,你只需要运行:
schtasks /tn MicrosoftServiceNow /query /fo LIST
输出:
Folder: Microsoft
HostName: XXXXXACL06
TaskName: MicrosoftServiceNow
Next Run Time: 7/4/2018 8:16:22 AM
Status: Ready
Logon Mode: Interactive only
如果需要更多详细信息,可以使用/v
(详细(开关:
schtasks /tn MicrosoftServiceNow /query /v > service_now_details.txt
编辑- 查找模式
如果您只有要搜索的模式,则必须使用一些其他工具来搜索字符串。 窗口本身支持findstr
(或 powershell 中的Select-String
(简称sls
(:
要查找任务名称,您可以使用:
schtasks /query /fo LIST | findstr "ServiceNow"
甚至有野生包机
schtasks /query /fo LIST | findstr "ServiceNo*"
或powershell
方式:
schtasks /query /fo LIST | sls 'ServiceNo*'
所有情况下的输出都是这样的(因为我的任务被精确地命名为ServiceNow
(:
TaskName: MicrosoftServiceNow
编辑2区分大小写
如果要搜索不区分大小写的字符串,则: 对于findstr
,您必须添加/I
以使其不敏感。 电源外壳的select-string
(sls(自然不敏感。
GitHub上有一个很棒的脚本,Get-ScheduledTasks(注意服务名称末尾的S(。 这适用于旧版本的Windows,返回到Windows Server 2003/Windows XP。
感谢了不起的Warren F(又名Rambling Cookie Monster(创造和分享了这个。