Como averiguar los administradores locales de los servidores

En este glorioso día (?) me pidieron de superurgencia un reporte que contuviera todos los administradores locales de los servidores que tenemos en uno de nuestros sitios.
Haciendo cuentas en el aire, me di cuenta de que eran mas de 60!

Y ahora… Quien podrá ayudarme? 🙁

OBVIAMENTE POWERSHELL!

Los puntos a tener en cuenta son los siguientes:

  1. $mascara debe ser cambiado a la subred que se desee (por ej, 172.17.*)
  2. Devuelve un csv con el nombre “Reporte admin” y la mascara de subred que se utilice para buscar.
import-module activedirectory
$ruta=get-location
$prueba=@()
$completo=0
## la subred que se quiere buscar
$mascara="172.16.*"
cd "AD:\"
$equipos= Get-ADComputer -Filter {OperatingSystem -like "*server*"} -Properties ipv4address, CanonicalName, operatingsystem | Where-Object {$_.ipv4address -like $mascara}
$total=$equipos.count
foreach ($compu in $equipos){
$nombre=$compu.name
$laip=$compu.ipv4address
$canonico=$compu.canonicalname
$OS=$compu.operatingsystem
$online=$false
$idioma=" "
$admicompleto=@()
$administradores="ERROR DESCONOCIDO"
$sacoadmin=$false
$adminroto=$false
$primero=$true
$agregar=" "
$online = Test-Connection $nombre -Quiet -count 1
if ($online){
## Esta online
$coso=get-wmiobject -ComputerName $nombre win32_operatingsystem
if(!$?){
$idioma="999999"
}else{
$idioma=$coso.oslanguage
}
Switch ($idioma){
"3082" {
#Español Int
$admicompleto= Invoke-Command -ComputerName $nombre -ScriptBlock {net localgroup administradores}
if($?){
$sacoadmin=$true
}else{
$adminroto=$true
}
break
}
"1033" {
#Ingles US
$admicompleto= Invoke-Command -ComputerName $nombre -ScriptBlock {net localgroup administrators}
if($?){
$sacoadmin=$true
}else{
$adminroto=$true
}
break
}
"1046" {
#Portugues bra
$admicompleto= Invoke-Command -ComputerName $nombre -ScriptBlock {net localgroup administradores}
if($?){
$sacoadmin=$true
}else{
$adminroto=$true
}
break
}
"999999" {
# Si dio error en el get idioma
$administradores="ERROR DE WMI"
$sacoadmin=$false
break
}
Default {
# No se encuentra el codigo de idioma
$administradores="NO SE PUDO RESOLVER EL CODIGO $idioma"
$sacoadmin=$false
break
}
}
if($sacoadmin){
## Ejecuto bien el proceso de admin
for($a=6;$a -lt ($admicompleto.count -2);$a++){
if ($primero){
$primero=$false
$agregar=$admicompleto[$a]
$administradores="$agregar"
}
else{
$agregar=$admicompleto[$a]
$administradores+=", $agregar"
}
}
}
if($adminroto){
##no ejecuto el proceso de admin por un error
$administradores="ERROR DE EJECUCION REMOTA"
}
}else{
## No esta online
$idioma="NO DISPONIBLE"
$administradores="NO DISPONIBLE"
}
$PRUEBA+=$compu | select-object @{Expression={$nombre};Label="Nombre"}, @{expression={$online};label="Online"}, @{expression={$laip};label="IP"}, @{expression={$OS};label="OS"}, @{expression={$canonico};label="OU"}, @{Expression={$idioma};Label="Idioma"},@{expression={$sacoadmin};Label="ProcesoAdmins"} ,@{expression={$administradores};Label="Administradores"}
}
cd $ruta
$archivo="./reporte admin "+$mascara.Replace('*','x')+".csv"
$prueba | export-csv $archivo

El resultado no fue 100% exitoso, pero de 60+ servidores, quedaron unos 5-6 en los que tuve que entrar a revisar manualmente. Nada mal, eh?

Prometo mas actualizaciones en las proximas semanas, tengo un par de scripts armados que no tuve tiempo de compartir.

Eso es todo por hoy!



Author: Luke

Hola, soy el admin. Podes saber un poquitito mas de mi en https://lucas.camilo.com.ar

Dejame un mensaje