计划任务 Powershell 脚本 - 作为用户帐户运行正常,但不能作为系统运行

4oo*_*oo4 1 powershell

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

该脚本会检查加载 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 }
Run Code Online (Sandbox Code Playgroud)

我需要做什么特别的事情才能正确加载这些管理单元吗?我打电话喜欢这个剧本,如果它事项:powershell.exe -executionpolicy bypass -file C:\path\to\script.ps1

编辑:从运行 (Get-PSSnapin -registered).countSYSTEM和我的用户帐户,我可以看到管理单元已正确加载,但仍然无法弄清楚为什么脚本的行为不同。

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

iRo*_*Ron 5

这不是为什么您的特定脚本不能在 SYSTEM 帐户下工作的答案,而是解释了如何对 SYSTEM 帐户下的(或任何其他)PowerShell 脚本进行故障排除

给一个人一条鱼,你就能养活他一天。教一个人钓鱼,你养活他一辈子。

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

以系统身份运行 PowerShell

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

使用PsExec

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

从这里您可以对特定脚本进行故障排除

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

如果脚本在 SYSTEM 窗口中运行得很好,那么我会检查以下文件中的任何错误Task Scheduler

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