ML
    • Recent
    • Categories
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Powershell: Get-OldComputers (and disable them)

    Developer Discussion
    powershell active directory pruning
    1
    2
    877
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • GreyG
      Grey
      last edited by scottalanmiller

      #Gets time stamps for all computers in the domain that have NOT logged in since after specified date
      #See original: https://gallery.technet.microsoft.com/scriptcenter/Get-Inactive-Computer-in-54feafde
      
      import-module activedirectory  
      
      ###########################################################
      # Modify these variables
      $domain = "domain.com"  
      $DaysInactive = 90  
      ###########################################################
      $time = (Get-Date).Adddays(-($DaysInactive)) 
      $runtime = (get-date -format g)   
      
      # Get all AD computers with lastLogonTimestamp less than our time 
      Write-Host Getting a list of systems from AD. This may take a moment.
      
      $systems = Get-ADComputer -Filter {LastLogonTimeStamp -lt $time -and enabled -eq "true"} -Properties LastLogonTimeStamp | select-object -expandproperty Name
      
      Write-Host `nA list of inactive systems to be checked is being written to $env:HOMESHARE\Inactive_systems.txt
      
      $systems | export-csv OLD_Computer.csv -notypeinformation
      # out-file $env:HOMESHARE\Inactive_systems.txt 
      # ^^^^^^^^^^ above is an alternate line to add to $systems for similar data gathering (Output hostname and lastLogonTimestamp into CSV or txt).
      
      Write-Host `nThese systems will now be tested for network connectivity.`n
      
      Foreach ($name in $systems)
      {Write-Host Testing $name ...
          #Ping Test. If PC is shut off, script will stop for the current PC in pipeline and move to the next one.
          if (Test-Connection -ComputerName $name -Count 1 -quiet)
          {
              # do productive stuff here
              Write-Host -ForegroundColor Green $name is online! ; add-content -path "$env:HOMESHARE\Inactive_systems.txt" -value "`n$name is online at $runtime"
          }
          
           else {
              # do error (no connection available) stuff here
              write-host -ForegroundColor Red $name is offline! ; add-content -path "$env:HOMESHARE\Disabled_systems.txt" -value "`n$name was disabled!" ; Set-ADComputer $name -Enabled $false ; Write-Host `n
          }
      } `
      1 Reply Last reply Reply Quote 3
      • GreyG
        Grey
        last edited by Grey

        Import-Module activedirectory
        $target = Get-ADOrganizationalUnit -Identity "OU=Disabled Computer Accounts,OU=Space,DC=Domain,DC=com"
        $computers = Get-ADComputer -filter {(enabled -eq "false")}
        foreach ($name in $computers) {
        Move-ADObject $name -TargetPath $target -verbose
        }
        

        Followup to above... this section would move the disabled computers to a 'disabled' OU.

        1 Reply Last reply Reply Quote 2
        • 1 / 1
        • First post
          Last post