Search code examples
powershellcomcredentialsremote-server

How to create a com object in another domain?


I'm trying to use PowerShell to quickly find the Scheduled Tasks in the root folder of a remote server. I find all sorts of scripts that others have written, but they're either looking at the localhost or on a server in the same domain. I support servers in dozens of domains, so I need some way to pass along credentials.

Here's the meat of my script:

$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.>
        }
    }
}

That code works fine either on my localhost or a server in the same domain as my workstation. In other scripts, I use Get-Credential to create $creds and (in various ways) pass that to the appropriate cmdlet. But with this one, I'm not sure. 'New-Object' doesn't accept a -Credential parameter. I've tried wrapping various parts inside an Invoke-Command scriptblock, since that accepts -Credential, but it fails in various ways. I'm not sure what needs to be wrapped in Invoke-Command--just the new-object? The foreach loop? The entire thing?

Thanks in advance.


Solution

  • When doing the Connect call, you can pass the server, domain, username, and password:

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

    This should allow you to use that object on the new domain.

    MSDN Reference