Need help with search multiple AD Forests/Domains

This topic contains 0 replies, has 1 voice, and was last updated by  Forums Archives 6 years, 2 months ago.

  • Author
  • #5488

    by bpearson32 at 2013-01-30 13:24:10

    I've already built the query I need to use:

    Get-ADComputer -Filter {OperatingSystem -eq "Windows 2000 Server"} -Property * | Sort-Object -Property Name | Select-Object -Property Name, OperatingSystem, OperatingSystemServicePack, OperatingSystemVersion

    Now instead of running it only on my current domain I have several forests (4 to be exact) with multiple domains inside that I need to search with the above query. I'm pretty sure I need a Do...While or a ForEach-Object type of looping structure but I haven't been able to figure that part out yet. The list of domains that I need to search will be in a text file (I named it domains.txt) one domain name per line.

    Here is an example of the type of data in my domains.txt file:


    So far I've been unable to figure out the looping structure that keeps the data in the pipeline so that it can be written out to a file.

    I'm definitely new to PowerShell as I just finished Learn PowerShell 3 in a month of lunches and I've started Learn PowerShell ToolMaking in a month of lunches. So it may be a simple solution but I haven't been able to figure it out.

    by ArtB0514 at 2013-01-30 14:20:48

    Here are a couple of ideas that should get you started.

    First, never, ever, try to store data in a pipeline. You'll almost certainly not get out what you expect. Think of separating your task into several pipelines such as Data Collection, Data Processing, and Data Presentation. When looping over a set of objects where each is going to provide a set of data with identical properties, Create an array object outside of the loop that you add each objects data to inside the loop.$colComputers = @()
    foreach ($domain in $domainlist) {
    $RawData = Get-ADComputer -Server $domain -Credentials $DomainAdmin -filter "whatever" -properties "whatever","list","you","want"
    $colComputers += $RawData | Select Property,@{Name='CreatedProperty';Expression={arbitrary-script-block}}

    In this particular case, though, rather than running Get-ADComputer locally, I'd set up a PSSession to a domain controller in each of the domains and use Invoke-Command -AsJob to execute the data collection in parallel on each domain.foreach ($domain in $domainlist) {
    $DC =
    $dcSession = New-PSSession -ComputerName $DC -Credential $DomainAdmin
    Invoke-Command {
    Add-Module ActiveDirectory
    Get-ADComputer -filter "whatever" -properties "whatever","list","you","want"
    } -Session $dcSession -AsJob
    $colComputers = Get-Job | Receive-Job

You must be logged in to reply to this topic.