whole script in case you’re interested:
Function Get-FileName($initialDirectory){
[System.Reflection.Assembly]::LoadWithPartialName(“System.windows.forms”) | Out-Null <#SaveFile Function, opens save file dialog#>
$SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
$SaveFileDialog.initialDirectory = $initialDirectory
$SaveFileDialog.filter = “CSV (.csv) |.csv| All files (.)| .”
$SaveFileDialog.ShowDialog() | Out-Null
return $SaveFileDialog.filename
}
Function ManagedBy{
Get-ADComputer -Filter * -SearchBase “ou=computers,ou=company,ou=division,ou=domain,dc=domain,dc=com” -Properties name, managedby, lastlogondate, enabled, canonicalname, location, description|where-object managedby -NE $null |
select name, managedby, lastlogondate, enabled, canonicalname, location, description |
sort-object -property managedby |
Group-Object -Property managedby |
Where-Object -Property Count -gt -Value 1 | #Autorun Function
ForEach-Object {
foreach($Item in $.Group){
[PSCustomObject]@{
ComputerName = $Item.Name
ManagedBy = ($
.Name -split ‘,’)[0] -join ‘,’
LastLogonDate = $Item.lastlogondate
Enabled = $Item.Enabled
OU = $Item.CanonicalName -replace “domain.com/domain/division/company”
Description = $Item.Description
Location = $Item.Location
}
}
}
}
Function GetSearch{
[cmdletbinding()]
Param ($Name, $OUs, $OU)
$OUs = “ou=computers,ou=company,ou=division,ou=domain,dc=domain,dc=com”
“ou=disabled_computers,ou=company,ou=division,ou=domain,dc=domain,dc=com”
if($Export -eq “y”){
$Name = Read-Host “Input name”
foreach($OU in $OUs){Get-adcomputer -Filter ‘Description -like $Name’ -searchbase $Ous -properties enabled, lastlogondate, name, canonicalname, description, location, created, modified, ipv4address, operatingsystemhotfix |
select name, description,canonicalname, enabled, lastlogondate, location| export-CSV $SaveFile -notypeinformation -append}
foreach($OU in $OUs){Get-adcomputer -Filter ‘Description -like $Name’ -searchbase $Ous -properties enabled, lastlogondate, name, canonicalname, description, location, created, modified, ipv4address, operatingsystemhotfix |
select name, description, canonicalname, enabled, lastlogondate, location|out-host}
$SearchAgain = Read-Host “Do you want to search again? [y]/[n]”
if($SearchAgain -like “y”){
GetSearch
}}
else{
$Name = Read-Host “Input name”
foreach($OU in $OUs){Get-adcomputer -Filter ‘Description -like $Name’ -searchbase $Ous -properties enabled, lastlogondate, name, canonicalname, description, location, created, modified, ipv4address, operatingsystemhotfix| select name, description, canonicalname, enabled, lastlogondate, location|out-host}
$SearchAgain = Read-Host “Do you want to search again? [y]/[n]”
if($SearchAgain -like “y”){
GetSearch
}
else{}
}
}
<# END FUNCTIONS
STANRT SCRIPT#>
$Export = read-host “Would you like to save this? [y]/[n]”
$AutoRun = Read-host “do you want to AutoRun? [y]/[n]”
if($Export -eq “y”){ #If export =y, open save dialog
$SaveFile = Get-Filename -initialDirectory “C:\scripts”
if($AutoRun -like “y”) {$Options = Read-Host “Specify output options: [C]onsole/[G]rid”
if($Options -like “c”){ManagedBy|export-csv $SaveFile -notypeinformation -append | ManagedBy|out-host}#Initial Autorun With Save - console output
else{ManagedBy|export-csv $SaveFile -notypeinformation -append | ManagedBy|Out-Gridview}}}#Initial Autorun with save - Grid Output
elseif($Autorun -like “y”){$Options = Read-Host “Specify output options: [C]onsole/[G]rid”
if($Options -like “c”){ManagedBy}
else{ManagedBy|Out-Gridview}}#Initial Autorun without save
elseif($Autorun -notlike “y”){GetSearch}#If not autorun, moves to manual search
$SearchOpt = Read-Host “Press [E] to exit, press any other key to go to manual search.”#IF AutoRun is saved, at end of output will ask if you want to exit or continue to manual search.
if($SearchOpt -like “e”){exit}
else{GetSearch}