计划任务Powershell脚本-以用户帐户运行OK,但不以SYSTEM身份运行

时间:2018-07-30 18:18:20

标签: powershell

我正在尝试以SYSTEM帐户的身份运行Powershell脚本作为计划任务,并且该任务运行正常,但脚本运行不正确,因为它未加载某些Citrix Powershell管理单元以SYSTEM身份运行时需要,但是以我的用户帐户身份运行即可。

该脚本会进行检查以加载Citrix管理单元,但是当以SYSTEM运行时,这些管理单元似乎无法正常工作。

if ((Get-PSSnapin "Citrix.Common.Commands" -EA silentlycontinue) -eq $null) {
try { Add-PSSnapin Citrix.* -ErrorAction Stop }
catch { write-error "Error Citrix.* Powershell snapin"; Return }

要正确加载那些管理单元,我需要做些什么特殊的事情吗?如果需要的话,我正在像这样调用脚本:powershell.exe -executionpolicy bypass -file C:\path\to\script.ps1

编辑:通过同时以SYSTEM和我的用户帐户运行(Get-PSSnapin已注册).count的方式,我可以看到管理单元已正确加载,但仍然可以无法弄清楚脚本为何表现不同。

OS是Server 2016,版本1607,这是脚本:https://gist.github.com/4oo4/85cec464e123d7f2793745e662d6e7ab

1 个答案:

答案 0 :(得分:2)

这不是为什么您的特定脚本在SYSTEM帐户下不起作用的答案,而是说明了如何在SYSTEM帐户下解决您的(或任何其他)PowerShell脚本的问题。

  

给男人一条鱼,你就喂他一天。教人钓鱼   你就喂他一辈子。

整个问题是,您实际上可以在您可能不知道的情况下,在SYSTEM帐户下打开一个交互式PowerShell命令提示符。

以SYSTEM身份运行PowerShell

有几种方法可以启动交互式PowerShell命令提示符,但可能最简单的方法是使用PsExec

使用PsExec

  • Download PsTools
  • 提取PSTools.zip,然后将PsExec复制到您的可执行路径中
  • 以管理员身份运行PowerShell (接受User AccountControl提示)
  • 在PowerShell管理员窗口中,输入命令:.\PsExec -i -s -d PowerShell
  • 新的PowerShell命令窗口将打开:
    PowerShell as SYSTEM
    (键入WhoAmI确认当前帐户)

从这里您可以解决特定脚本:

  • 运行特定脚本时是否有任何错误?
  • 它是否在特定命令下挂起或崩溃?
  • 在用户帐户下运行它是否有区别?

如果脚本似乎在SYSTEM窗口中运行正常,那么我将检查Task Scheduler中是否有错误:

  • 在左窗格中选择Task Scheduler Local-Task Scheduler Library
  • 在顶部中间窗格中选择您的任务
  • (确保右侧窗格Display All Task History中有Enabled
  • 在底部中间窗格中,检查history标签中的事件