Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell - verify object exists in AD

i have a text file containing arround 100 servers, how can i push these into a script and test if they exist within AD? I have a simple script below:

$serverlist = get-content ServerList.txt
foreach ($server in $serverlist) {
    if (Get-ADComputer $serverlist ) {
        Write-Host "#########################"  
        Write-Host "Computer object exists"
        Write-Host "#########################"  
    }
    else {
        Write-Host "#########################"  
        Write-Host "Computer object NOT FOUND"
        Write-Host "#########################"
    }
}

the above does not work returning a error:

Get-ADComputer : Cannot convert 'System.Object[]' to the type 'Microsoft.ActiveDirectory.Management.ADComputer' required by parameter 'Identity'. Specified method is not supported.

Can someone please explain does the get-adcomputer only allow a single object? Also if i remove the txt file and add a server shown below:

if (Get-ADComputer "server name" )

The above provides only results if the server exists within AD, if the server does not the error is shown below:

Get-ADComputer : Cannot find an object with identity: 'iuiub' under: 'DC=####,DC=#####,DC=#####'

Thank you for any insight / help!

Phil

like image 949
Richard Avatar asked Jun 23 '26 20:06

Richard


1 Answers

Create an array - @(). If the array has 1 or more objects in it - which is $true - then you know the computer exists. If the array has 0 objects in it - which is $false- then you know the computer doesn't exist. I know some people don't like the ErrorAction to be set to SilentlyContinue but you're "Outputting an Error" if an error does occur.

$serverlist = get-content ServerList.txt
foreach ($server in $serverlist) {
    if (@(Get-ADComputer $server -ErrorAction SilentlyContinue).Count) {
        Write-Host "#########################"  
        Write-Host "Computer object exists"
        Write-Host "#########################"
    }
    else {
        Write-Host "#########################"  
        Write-Host "Computer object NOT FOUND"
        Write-Host "#########################"
    }
}

Another thing you could try are try catch blocks. Sorta like this:

$serverlist = get-content ServerList.txt
foreach ($server in $serverlist) {
    try{
        Get-ADComputer $server -ErrorAction Stop
        Write-Host "#########################"  
        Write-Host "Computer object exists"
        Write-Host "#########################"
    }
    catch{
        Write-Host "#########################"  
        Write-Host "Computer object NOT FOUND"
        Write-Host "#########################"
    }
}
like image 79
E.V.I.L. Avatar answered Jun 25 '26 19:06

E.V.I.L.