我正在尝试以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
答案 0 :(得分:2)
这不是为什么您的特定脚本在SYSTEM帐户下不起作用的答案,而是说明了如何在SYSTEM帐户下解决您的(或任何其他)PowerShell脚本的问题。
给男人一条鱼,你就喂他一天。教人钓鱼 你就喂他一辈子。
整个问题是,您实际上可以在您可能不知道的情况下,在SYSTEM帐户下打开一个交互式PowerShell命令提示符。
有几种方法可以启动交互式PowerShell命令提示符,但可能最简单的方法是使用PsExec。
使用PsExec
PSTools.zip
,然后将PsExec
复制到您的可执行路径中PowerShell
(接受User AccountControl
提示).\PsExec -i -s -d PowerShell
PowerShell
命令窗口将打开:WhoAmI
确认当前帐户) 从这里您可以解决特定脚本:
如果脚本似乎在SYSTEM窗口中运行正常,那么我将检查Task Scheduler
中是否有错误:
Task Scheduler Local
-Task Scheduler Library
Display All Task History
中有Enabled
)history
标签中的事件