【问题标题】:How to create a com object in another domain?如何在另一个域中创建 com 对象?
【发布时间】:2014-07-24 05:23:56
【问题描述】:

我正在尝试使用 PowerShell 在远程服务器的根文件夹中快速找到计划任务。我发现其他人编写的各种脚本,但他们要么查看本地主机,要么查看同一域中的服务器。我支持数十个域中的服务器,因此我需要某种方式来传递凭据。

这是我的脚本的主要内容:

$server = "<computername>"
$schedule = new-object -com("Schedule.Service") 
$Schedule.connect($server)
$folder = $schedule.GetFolder("") 
$tasks = $folder.GetTasks("")
foreach($task in $tasks) {
if (($task = $Folder.GetTasks(0))) {
    $Tasks| ForEach-Object {[array]$results += $_}
    $Tasks | Foreach-Object {
        New-Object -TypeName PSCustomObject -Property @{
            'Name' = $_.name
            <etc.>
            <etc.>
        }
    }
}

该代码在我的本地主机或与我的工作站位于同一域的服务器上都可以正常工作。在其他脚本中,我使用 Get-Credential 创建 $creds 并(以各种方式)将其传递给适当的 cmdlet。但是对于这个,我不确定。 'New-Object' 不接受 -Credential 参数。我尝试将各个部分包装在 Invoke-Command 脚本块中,因为它接受 -Credential,但它以各种方式失败。我不确定 Invoke-Command 中需要包含什么——只是新对象? foreach 循环?整件事?

提前致谢。

【问题讨论】:

  • 如果您可以升级到 powershell 4,它具有计划任务 cmdlet。我知道它不能回答问题,但它是一种替代方法。

标签: powershell com credentials remote-server


【解决方案1】:

在进行Connect调用时,可以传递服务器、域、用户名和密码:

$Schedule.Connect($serverName, $user, $domain, $password);

这应该允许您在新域上使用该对象。

MSDN Reference

【讨论】:

  • 我认为这样就可以了,厄里斯。使用您的答案,我发现该方法仅适用于 Vista 及更高版本。我仍然支持相当多的 Windows 2003 服务器,但每个月越来越少,所以这是一个逐渐减少的问题。我还看到这种方法不适用于 DMZ 中的服务器。它只是抛出异常错误,我必须处理。但这让我走得很远。
猜你喜欢
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2011-09-08
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多