在Windows Server 2008R2上无法获取
Get-ScheduledTask
,因为它是在Windows Server 2012中引入的,并且没有被移植回来。有关详细信息,请参见
Github链接。
最能描述这种情况的评论是:
“嗨@dronkoff-此模块支持PS 4.0。但问题不在于PowerShell的版本。问题在于此资源依赖的ScheduledTasks模块未内置于Windows Server 2008R2中,而是首次包含在Windows Server 2012中。
许多PowerShell模块都是如此:它们在较旧版本的Windows中缺失(例如Networking)。在偶尔出现的情况下,还有一种简单的解决方法。但在这种情况下,如果要将资源转换为使用schtasks.exe,则不可能进行完全重写,并且可能会导致某些非常不稳定和错误的情况(更不用说会出现不同本地化版本的schtasks的问题了)。恐怕我真的看不到这种情况发生(除非社区中的其他人对如何实现此目标有一些想法)。
但是您是正确的,应该提到目前不支持Windows Server 2008R2。”
解决方法是使用具有正确开关的
schtasks
。
如果您将其放在
Microsoft
文件夹中,就像我在示例中所示,您只需要运行:
schtasks /tn \Microsoft\ServiceNow /query /fo LIST
输出:
Folder: \Microsoft
HostName: XXXXXACL06
TaskName: \Microsoft\ServiceNow
Next Run Time: 7/4/2018 8:16:22 AM
Status: Ready
Logon Mode: Interactive only
如果你想获得更多细节,可以使用/v
(详细)开关:
schtasks /tn \Microsoft\ServiceNow /query /v > service_now_details.txt
编辑 - 寻找一个模式
如果您只有一个要搜索的模式,则必须使用一些附加工具来搜索字符串。Windows原生支持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: \Microsoft\ServiceNow
Edit2 大小写敏感性
如果您正在搜索不区分大小写的字符串,则对于 findstr
您必须添加 /I
以使其不区分大小写。 PowerShell 的 select-string
(sls)本来就是不区分大小写的。
Get-ScheduledTask
。您可以使用$PSVersionTable
命令检查当前已安装的版本。 - Paxz