Finding ADDomainController with wild card

This topic contains 2 replies, has 2 voices, and was last updated by  Jeremiah Logan 3 weeks, 3 days ago.

  • Author
    Posts
  • #82762

    Jeremiah Logan
    Participant

    I have been working on a script to connect to create AD Objects for a company with a number of remote sites. Because some of the sites have very slow links replication can be a pain so I thought to connect to the DC in the particular site and create it there. In looking at the docs on Get-ADDomainController, however, there seems to be no support for wildcards. I tried to do a two-step, something like this:

    $aDCs = Get-ADDomainController -Filter * | Select-Object Name
    
    ForEach ($sDC in $aDCs) {
        If ($sDC.Name -like "ATL") {
            Write-Host $sDC.Name
        }
    }
    

    to grab the domain controller "ATL-DC03", but that does not work. I can see ATL-DC03 in $aDCs, and if I remove the if statement if prints all of the DC names, including the one I am after, but I cannot seem to match it and get only that one. I have tried -like, -contains, and just about every other comparison I can think of, but no joy. Is there an easy way to get this done? Or better yet a way to do the comparison right in the Get-ADDomainController line? I tried a couple variances on this:

    Get-ADDomainController -Filter * | Where-Object ($_.Name -like "ATL")
    

    But similarly no luck. Any suggestions would be most welcome

  • #82778

    postanote
    Participant

    This is because if you are looking for all DC's with ATL in the as the name, you really need to use 'ATL*' not just 'ATL'.
    You can also use RegEx matches directly and do this in one line.

    For example, try —
    $aDCs = (Get-ADDomainController -Filter * | Select-Object Name) -match 'ATLDC'

    Or using what you submitted a couple of ways...

    $aDCs = Get-ADDomainController -Filter * | Select-Object Name

    ForEach ($sDC in $aDCs) {
    If ($sDC.Name -like "ATL*") {
    $sDC.Name
    }
    }

    Note – if you are just outputting to the console, you really don't need the write-* thing.
    Secondly, if you are to put things on the pipeline, Write-Host is not a thing to use.

    You can write to the console without write-*, just by using strings as follows...

    $sDC.Name
    "$sDC.Name"
    ($sDC.Name)
    Write-Output 'whatever'

    even in output combination.

    'Getting DC named' + $sDC.Name
    "Getting DC named $sDC.Name"

    You only really need Write-Host, if you are outputting color to the console in your output, or other formatting needs.

  • #82789

    Jeremiah Logan
    Participant

    Thanks, that worked. In all I tried I didn't get the syntax correct. And yes, the output to the console is due to it being part of a larger script – actually reading the STDOut with -ForegroundColor parameter and pulling that into a custom GUI. Thanks again for the push in the right direction.

You must be logged in to reply to this topic.