从计划任务运行时,Get-CimInstance不起作用


1

我有一个Powershell脚本,该脚本使用以下命令导出本地计算机上所有服务的列表:

Get-CimInstance win32_service | Export-Csv $PSScriptRoot\Local\services.csv

当我从Powershell提示符下在本地管理员帐户下运行它时,它工作正常。我尝试将其作为计划任务运行,使用相同的本地管理员帐户运行计划任务,但没有任何输出到.csv文件。

我知道计划任务本身运行正常,因为还有其他输出文件正在按我的期望进行更新。将脚本作为中断任务的计划任务运行有什么不同?

更新:我在后台运行ProcMon的情况下都运行了脚本。我注意到的一个区别是计划任务的进程的Session ID为0,而运行脚本时的Session ID为4。

Answers:


1

我认为问题在于我已将该任务标记为:

(o)运行是否用户登录

根据微软的说法

您可以指定任务应运行,即使在触发任务时未计划运行任务的帐户也已登录。为此,请选择标有“无论用户是否登录运行”的单选按钮。如果选择此单选按钮,任务将不会交互运行。要使任务交互运行,请选择仅在用户登录时运行单选按钮。

关键部分是这句话:

要使任务交互运行,请选择仅在用户登录时运行单选按钮。

我猜想powershell需要交互运行才能使Get-CimInstancecmdlet正常运行。我将任务更改为仅在用户登录后才运行,并且一切似乎都可以正常运行。


1

我在Win32_Process中遇到了同样的问题。我试图监视某个.exe的使用情况,但是当以“无论用户是否登录”运行作为计划任务运行时,此代码行均不返回任何内容:

$Procs = Get-CimInstance Win32_Process -Computer $ComputerName -Filter "Name = '$MonProcName'"

我的组织不允许一直保持登录状态,因此我回到了使用Get-WmiObject开始的较早的草案,并且可以注销!

$Procs = Get-WmiObject -Computer $ComputerName -Class Win32_Process -Filter "Name = '$MonProcName'"

我切换到Get-CimInstance的唯一原因是更好的.CreationDate日期时间格式。重新格式化Get-WmiObject .CreationDate的麻烦是值得的,以便我可以注销后运行它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.