我试图到位的Windows任务调度监控一些,我有一个运行以下PowerShell脚本:批处理文件,PowerShell脚本,PSEXEC和系统用户
$serverName = hostname
$schedule = new-object -com("Schedule.Service")
$schedule.connect($serverName)
$tasks = $schedule.getfolder("\").gettasks(0)
$tasks |select name, lasttaskresult, lastruntime
这将返回列表运行的服务器上的计划任务,最后的任务结果和上次运行时间。其目的是将数据集返回到我们可用于提醒的监控解决方案(Geneos)。
我们有一个很大的Win2008地产,所以我希望脚本集中允许任何Geneos探测器调用它并返回他们的主机的数据集。要做到这一点,我包裹在一个.bat文件,其执行以下操作PowerShell的:
\\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:
所以基本上我的问题是,如何获取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,所以它几乎在那里,但有些东西并不完全正确。
+1有趣的问题!我认为我可以回答,但首先我需要你像以前一样使用Geneos运行(以前从未听说过它),但是使用像CMD这样的简单命令替换PowerShell命令,所以它不会遍历网络。如果不起作用,则在PSEXEC语句后面添加* -s *以确保PSEXEC与系统帐户一起运行。此外,我不积极PSEXEC可以在'receteula'前面运行* - *,而不是*/* ...可能想尝试两种方式。 – Lizz
感谢您的反馈。我可以确认我可以使用psexec启动cmd.exe进程,我可以在原始提供的管理员帐户(如果我提供** - h **)或系统(使用** - s **)下运行它,而无需问题。我忘了补充说,在本地复制.ps1脚本的原始PSEXEC工作正常。我已经尝试了/和 - 对于可接受的并且看起来都不错,这只适用于第一次运行(最初使用 - 这清除了我在psExec进程中看到的初始问题,EULA在后台弹出,未被接受) – Phlebass
是否有任何特定原因不使用powershell remoting iso psexec? –