Powershell - verify object exists in AD

て烟熏妆下的殇ゞ 提交于 2019-12-14 01:50:55

问题


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


回答1:


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 "#########################"
    }
}



回答2:


Line 3, change $serverlist to $server

With regards to handling a not found result. I'd try flipping the logic :

 $serverlist = get-content ServerList.txt
 foreach ($server in $serverlist) {
    $tempVar = Get-ADComputer $server
    if ($tempVar -like "Get-ADComputer : Cannot find an object with identity" ) {
      Write-Host "#########################"  
      Write-Host "Computer object NOT FOUND"
      Write-Host "#########################"  
    }
    else{
       Write-Host "#########################"  
       Write-Host "Computer object exists"
       Write-Host "#########################"
    }
}  



回答3:


In order to get a more helpful output, I'd go with the following... You'll just have a list of green and red lines indicating which server was found and which one wasn't.

$serverlist = get-content ServerList.txt

    foreach ($server in $serverlist) {

        try {

            Get-ADComputer $server -ErrorAction Stop | Out-Null
            Write-Host "$($server) exists" -ForegroundColor DarkGreen

        }

        catch {

            Write-Host "$($server) NOT FOUND" -ForegroundColor DarkRed

        }

    }


来源:https://stackoverflow.com/questions/21525313/powershell-verify-object-exists-in-ad

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!