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