2012-11-09 83 views
3

我试图到位的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,所以它几乎在那里,但有些东西并不完全正确。

+0

+1有趣的问题!我认为我可以回答,但首先我需要你像以前一样使用Geneos运行(以前从未听说过它),但是使用像CMD这样的简单命令替换PowerShell命令,所以它不会遍历网络。如果不起作用,则在PSEXEC语句后面添加* -s *以确保PSEXEC与系统帐户一起运行。此外,我不积极PSEXEC可以在'receteula'前面运行* - *,而不是*/* ...可能想尝试两种方式。 – Lizz

+0

感谢您的反馈。我可以确认我可以使用psexec启动cmd.exe进程,我可以在原始提供的管理员帐户(如果我提供** - h **)或系统(使用** - s **)下运行它,而无需问题。我忘了补充说,在本地复制.ps1脚本的原始PSEXEC工作正常。我已经尝试了/和 - 对于可接受的并且看起来都不错,这只适用于第一次运行(最初使用 - 这清除了我在psExec进程中看到的初始问题,EULA在后台弹出,未被接受) – Phlebass

+0

是否有任何特定原因不使用powershell remoting iso psexec? –

回答

1

我们设法在Windows schtasks命令(link here)上使用powershell包装。 Schtasks可以在SYSTEM帐户下运行,并将返回所有必要的任务信息,因此我们不再需要使用权限,并且环境上没有更多明文密码(奖金)。

我们包裹:

schtasks.exe Query /FO CSV 

在PowerShell脚本中,并用PS格式输出到由Geneos预期的CSV风格。

+0

我很高兴你有这个解决方案。但是,创建和维护计划任务可能会在未来引入意想不到的问题 - 例如取决于计划任务,这些任务可能并不总是存在。我在这一点上的想法是PowerShell使用的信用(见上面我的评论)。 – Lizz