Author Posts

October 24, 2017 at 6:30 pm

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

October 24, 2017 at 8:08 pm

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.

October 24, 2017 at 8:42 pm

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.