批处理文件,Powershell脚本,PSExec和系统用户

我正在尝试对
Windows任务计划程序进行一些监视,我有一个运行以下内容的Powershell脚本:

$serverName = hostname
$schedule = new-object -com("Schedule.Service")
$schedule.connect($serverName)
$tasks = $schedule.getfolder("\").gettasks(0)
$tasks |select name, lasttaskresult, lastruntime

这将返回运行它的服务器上的计划任务列表,最后一个任务结果和上次运行时间.这样做的目的是将数据集返回到我们可用于警报的监控解决方案(Geneos).

我们有一个很大的Win2008版本,所以我希望脚本集中允许任何Geneos探针调用它并为它们的主机返回一个数据集.为此,我将powershell包装在.bat文件中,该文件执行以下操作:

\\fileserverhk\psexec.exe -accepteula -u admin -p "pwd" powershell.exe cpi \\fileserverhk\scripts\TaskSchedulerMonitor.ps1 -Destination C:\Monitor\TaskSchedulerMonitor.ps1
\\fileserverhk\psexec.exe -accepteula -u admin -p "pwd" powershell.exe -ExecutionPolicy Bypass -File C:\Monitor\TaskSchedulerMonitor.ps1

第一步是在本地复制.ps1文件以绕过Powershell而不信任UNC路径,第二步运行脚本.

如果我从测试服务器手动运行.bat文件,它执行正常(这是在管理员帐户下登录).但是,当我通过Geneos(在SYSTEM帐户下运行)触发.bat文件时,我得到:

Access is denied.
PsExec could not start powershell.exe:

所以基本上我的问题是,当在SYSTEM帐户下运行时,如何让PsExec切换用户?尽管PsExec具有为另一个帐户设置的凭据,但显然有些东西阻止它在系统下运行时更改.

我阅读尝试使用-h开关运行它,但我收到以下错误:

The handle is invalid.
Connecting to local system...


Starting PsExec service on local system...

Connecting with PsExec service on <server>...

Starting powershell.exe on <server>...

Error communicating with PsExec service on <server>:

除了上述错误之外,我最终还是在远程计算机上挂起了PSExec和PowerShell进程.有趣的是我可以看到在SYSTEM下运行的PSExec和PSEXEC.SVC以及在admin下运行的powershell,所以它几乎就在那里,但有些东西并不完全正确.

最佳答案 我们设法使用Windows schtasks命令(
link here)上的powershell包装器到达那里. Schtasks可以在SYSTEM帐户下运行,并将返回所有必要的任务信息,因此我们不再需要了解权限,并且不再需要环境中的明文密码(奖励).

我们包装:

schtasks.exe Query /FO CSV

在PowerShell脚本中,并使用PS将输出格式化为Geneos期望的csv样式.

点赞