none
Como saber que servicios y tareas se ejecutan con un usuario en todas las maquinas del dominio RRS feed

  • Pregunta

  • Buenos dias,

    Voy a realizar el cambio de nombre de cuenta y/o de password del usuario Administrador del Dominio (2008 R2, nativo). Antes de realizar el cambio necesitaria averiguar en que equipos se estan ejecutando tareas y/o servicios con dicho usuario. Por desgracias es una infraestructura muy amplia y el conocimiento historico de la misma lo desconozco por lo que si pudiera automatizar dicha tarea seria un avance.

    Si alguien se ha visto en este tesitura con anterioridad le agradeceria su colaboracion u orientacion.

    Gracias

    lunes, 1 de julio de 2013 9:05

Respuestas

Todas las respuestas

  • Mira si esto te puede valer:

    VBScript Para Listar Los Servicios Lanzados Por Usuarios No Del Sistema
    http://urpiano.wordpress.com/2009/01/13/vbscript-para-listar-los-servicios-lanzados-por-usuarios-no-del-sistema/


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/

    lunes, 1 de julio de 2013 9:51
    Moderador
  • Ok muchas gracias. Justo despues de plantear la duda lo encontre y ya lo he lanzado.

    Ahora voy a ver si puedo hacer la misma tarea pero para averiguar si hay tareas programadas en lugar de servicios.

    Nuevamente Gracias

    A.

    lunes, 1 de julio de 2013 10:20
  • En cuanto a las tareas, puedes usar Powershell, partiendo de un fichero con la lista, un nombre por línea, de los equipos que se quieren revisar. El presente script espera el fichero c:\Listados\servidores.txt y generará el fichero, de valores separados por tabulador, c:\Listados\tareas_y_equipos.txt:

    # Nos guardamos el valor actual de $OFS y establecemos como valor el tabulador
    $OFSOld = $OFS
    $OFS = "`t"
    # Solicitamos el nombre de usuario con el que ejecutar el proceso en los equipos
    $Usuario = Read-Host "Entre el nombre del usuario de con el que ejecutar el proceso"
    # Obtenemos cifrada la contraseña del usuario; de esta forma no quedará
    # expuesta a ojos indiscretos cuando es tecelada
    $Password = Read-Host "Entre la contraseña del usuario $Usuario" -AsSecureString
    # Pasamos a texto plano la contraseña
    $Password = [Runtime.InteropServices.Marshal]::PtrToStringAuto( `
                [Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password))
    # Establecemos la ruta y nombre del fichero con la lista de equipos, uno por línea
    $Equipos = "c:\listados\servidores.txt"
    # Establecemos la ruta y nombre del fichero con los errores
    $Errores = "c:\Listados\errores_listando_tareas.txt"
    # Establecemos la ruta y nombre del un fichero temporal que se utilizará
    $Temporal = "c:\Listados\temporal.txt"
    # Establecemos la ruta y nombre del fichero con el resumen
    $Resumen = "c:\Listados\resumen.txt"
    # Establecemos la ruta y nombre del fichero con el listado final
    $Temporal = "c:\Listados\tareas_y_equipos.txt"
    # Iniciamos la variable con los resultados finales poniendo los encabezados
    $Salida += "SAM`tTarea`tEstado`tUsuario"
    # Leemos el fichero de equipos y lo recorremos línea a línea, es decir, equipo a equipo
    # Iniciamos un contador de equipos
    $i = 0
    Get-Content "$Equipos" |ForEach{ `
        # Mostramos por pantalla el nombre del equipo en curso
        $_
        # Nos guardamos el nombre del equipo
        $Equipo = $_
        # Vaciamos la variable con la que almacenamos el resultado de schtasks
        $Tasks = $null
        # Obtenemos el resultado de schtask lanzado sobre el equipo actual
        $Tasks = schtasks /QUERY /U "$Usuario" /P "$Password" /FO LIST /V /S $Equipo 2>> $Errores
        # Si la ejecucion no fue exitosa, agregamos el nombre de equipo al fichero de errores.
        # Hacemos esto así porque el mensaje de error no lo incluye y no se sabe a qué equipo
        # corresponde el error; de esta forma podremos saberlo
        If($? -eq $false){$Equipo >> $Errores}
        # Agregamos los resultados al fichero temporal
        $Tasks >> $Temporal
        # Incrementamos el contador de equipos
        $i++
    }
    # Mostramos el total de equipos procesados
    "En total $i equipos"
    # Leemos línea a línea el fichero. Filtramos a las líneas que nos interesan, mandándolas
    # al fichero de resumen, sustituyendo al que hubiera (-Force)
    Get-Content "$Temporal" -Encoding Ascii |
    Where-Object {$_ -like "Nombre de host:*" -or `
                  $_ -like "Nombre de tarea:*" -or `
                  $_ -like "Ejecutar como usuario:*" -or `
    			  $_ -like "Estado de tarea programada:*"} |
    Set-Content $Resumen -Encoding Unicode -Force
    
    # Leemos el fichero de resumen
    $ver = get-content "$Resumen" -Encoding Unicode
    # Establecemos las 4 variables siguientes con el objeto de quitar los encabezados
    # y dejar sólo los datos
    $H = "Nombre de host:                                        "
    $t = "Nombre de tarea:                                       "
    $u = "Ejecutar como usuario:                                 "
    $e = "Estado de tarea programada:                            "
    # Recorremos el contenido del fichero de resumen.
    # Lo hacemos en saltos de cuatro en cuatro para obtener un array que contendrá
    # un array de cuatro elementos por cada elemento del array
    For($i=0;$i -lt $ver.Count;$i += 4)
    {
        $Salida += "$(($ver[$i].Replace($h,'')), `
                   ($ver[$i+1].Replace($t,'')), `
                   ($ver[$i+2].Replace($e,'')), `
    			   ($ver[$i+3].Replace($u,'')))"
    }
    # Recorremos el array y lo enviamos a Set-Content, para que se cree el fichero con
    # el listado final. Gracias a haber puesto el tabulador como valor de $OFS,
    # Cada línea contendrá los datos de una tarea separados por tabulador
    $Salida | Set-Content "$Final" -Encoding Unicode -Force
    # Restauramos $OFS al valor que tenía antes de la ejecución del script.
    If($OFSOld -ne $null)
    {
        $OFS = $OFSOld
    }
    Else
    {
        Remove-Variable OFS
    }
    Remove-Variable OFSOld


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/



    • Editado Fernando ReyesModerator lunes, 1 de julio de 2013 12:42 Corrección de un par de errores en los comentarios
    lunes, 1 de julio de 2013 10:57
    Moderador