连接到本地主机

时间:2018-07-26 09:45:09

标签: powershell scheduled-tasks

我有一个PowerShell脚本,该脚本连接到服务器列表,并查询计划的任务。 (类似于https://community.spiceworks.com/scripts/show_download/2094-get-scheduled-tasks-from-a-computer-remote-or-local的东西)它过去在Windows 2008R2服务器上可以正常工作。但是,在新的Windows Server 2012 R2服务器上,它显示以下错误。奇怪的是,它仅在连接到本地计算机时发生,而在远程服务器上没有错误。使用管理权限在我的帐户下运行时,它不会引发任何错误。

https://www.powershellmagazine.com/2015/04/10/pstip-retrieve-scheduled-tasks-using-schedule-service-comobject/

本文说

  

不幸的是,与使用此COMObject的Get-ScheduledTask cmdlet不同,它需要具有管理凭据的提升的PowerShell控制台。

但是该脚本曾经在Windows Server 2008 R2服务器上可以正常工作。

是否有可以调整的脚本才能在2012 R2服务器上运行?

Exception calling "Connect" with "1" argument(s): "Access is denied. (Exception
from HRESULT: 0x80070005 (E_ACCESSDENIED))"
At C:\scripts\CheckSchedulers\CheckSchedulers.ps1:20 char:10
+         ($TaskScheduler = New-Object -ComObject Schedule.Service).Connect($curSe ...
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

该错误是由我的代码引起的,使用spiceworks中的代码可以重现。

1 个答案:

答案 0 :(得分:1)

您正在创建一个Schedule.Service对象,将其分配给一个变量,然后尝试根据该赋值的结果调用Connect()方法。我不希望它能在任何Windows或PowerShell版本上运行,如果能在Server 2008 R2上运行,那很可能只是偶然。

您需要在变量中使用Schedule.Service对象(因为在其他操作中也将需要它),并且必须在该对象上调用Connect() ,因此您需要分两个步骤进行操作:

$TaskScheduler = New-Object -ComObject 'Schedule.Service'
$TaskScheduler.Connect($servername)  # connect to remote Task Scheduler

如果您要循环连接到其他服务器,则可以重新使用该对象,而仅Connect()到下一个服务器。

要连接到本地Task Scheduler服务,只需删除$servername并调用不带参数的方法:

$TaskScheduler.Connect()  # connect to local Task Scheduler