none
Introduccion de datos en objeto de AD alimentado por un fichero .csv RRS feed

  • Pregunta

  • Buenos dias,

    Estoy tratando de rellenar una serie de datos en los objetos de varios servidores en AD, y para ello estoy ejecutando este script de powershell:

                            

    Function Write-Log{
            Param(
            [parameter(mandatory=$true)]
            $Write
            )
            $date= get-date
            $day= $date.Day
            if($day -lt 10){
                $day="0"+$day
            }
            $month = $date.Month
            if($Month -lt 10){
                $Month="0"+$Month
            }
            $year= $date.Year
            $log= $env:USERPROFILE+"\DOCUMENTS\AddingAtributtesADServers"+$day+"_"+$month+"_"+$year+".log"
            $logfile= test-path -Path $log
            if ($logfile -eq $false){
                $titleLog= "action;CN;Company;AdminDescription;Comment;Department;Division;Location;Type"
                $titleLog > $Log
            }
            $write >> $log

    }#fin Write-Log

    $file= "C:\servidores.csv"
    $inf = import-csv $file
    Foreach($server in $inf){
        $srv=$server.cn
        $company = $server.Company
        $business= $server.AdminDescription
        $BusinessCategory = $server.comment
        $dpto= $server.Department
        $division = $server.Division
        $location = $server.Location
        $type = $server.Type
        write-host $srv
        If($enabled -eq "true"){
            $error.Clear()
            Set-ADComputer -identity $srv -add @{"Company"="$company"} -erroraction Continue
            if ($error.Count -gt 0){
                $txtCompany= "ERROR"
                }else{
                $txtCompany="SUCCEEDED"
            }

            $error.Clear()        
            Set-ADComputer -identity $srv -add @{"AdminDescription"="$Business"} -erroraction Continue
            if ($error.Count -gt 0){
                $txtAdminDescription= "ERROR"
                }else{
                $txtAdminDescription="SUCCEEDED"
            }

            $error.Clear()
            Set-ADComputer -identity $srv -add @{"comment"="$BusinessCategory"} -erroraction Continue
            if ($error.Count -gt 0){
                $txtMachineRole= "ERROR"
                }else{
                $txtMachineRole="SUCCEEDED"
            }

            $error.Clear()             
            Set-ADComputer -identity $srv -add @{"Department"="$dpto"} -erroraction Continue
            if ($error.Count -gt 0){
                $txtDepartment= "ERROR"
                }else{
                $txtDepartment="SUCCEEDED"
            }

            $error.Clear()
            Set-ADComputer -identity $srv -add @{"Division"="$Division"} -erroraction Continue
            if ($error.Count -gt 0){
                $txtDivision= "ERROR"
                }else{
                $txtDivision="SUCCEEDED"
            }

            $error.Clear()
            Set-ADComputer -identity $srv -add @{"Location"="$Location"} -erroraction Continue
            if ($error.Count -gt 0){
                $txtLocation= "ERROR"
                }else{
                $txtLocation="SUCCEEDED"
            }

            $error.Clear()
            Set-ADComputer -identity $srv -add @{"type"="$type"} -erroraction Continue
            if ($error.Count -gt 0){
                $txttype= "ERROR"
                }else{
                $txttype="SUCCEEDED"
            } 

            $txt= "add_info_AD;$srv;Enabled;$txtcompany;$txtadmindescription;$txtMachineRole;$txtDepartment;$txtDivision;$txtLocation;$txtType"
            write-log -Write $txt
        }else{
            $error.Clear()
            Set-ADComputer -identity $srv -add @{"Company"="$company"} -erroraction Continue
            if ($error.Count -gt 0){
                $txtCompany= "ERROR"
                }else{
                $txtCompany="SUCCEEDED"
            }
            $txt= "add_info_AD;$srv;Disabled;$txtcompany;N/A;N/A;N/A;N/A;N/A;N/A"
            Write-Log -Write $txt
        }
     }#end Foreach


    El fichero de lectura tiene estos campos:  CN,Company,BusinessRoles,Description,Department,Division,Location,Type

    No obtengo mensaje de error en la ejecución, pero tampoco se rellenan los campos. ¿Qué estoy poniendo mal?

    jueves, 25 de abril de 2019 10:29

Respuestas

  • Hola Raúl, tienes razón, me equivoqué :(

    De "esa época" lo que sí permite modificaciones es LDIFDE.EXE pero el formato del archivo de entrada no es tan sencillo

    Si no te sirviera el que puso Erik, revisa en el repositorio de script que seguramente hay alguno

    http://gallery.technet.microsoft.com/

     


    Guillermo Delprato
    Buenos Aires, Argentina
    El Blog de los paso a paso

    MCSE - MCSA2012
    MCITP: Enterprise Administrator / Server Administrator
    MCTS: Active Directory/Network Configuration/Applications Configuration/Server Virtualization/Windows 7 Configuration/Windows 7 & Office 2010 Deployment/Vista Configuration

    Este mensaje se proporciona "como está" sin garantías de ninguna clase. Usted asume todos los riesgos.

    • Marcado como respuesta Raul.Arias miércoles, 8 de mayo de 2019 9:51
    lunes, 6 de mayo de 2019 11:38

Todas las respuestas

  • En

    $env:USERPROFILE+"\DOCUMENTS\AddingAtributtesADServers"+$day+"_"+$month+"_"+$year+".log"

    Acaso no USERPROFILE es una variable, ¿estás haciendo referencia a ella como variable?

    Déjame saber tus comentarios

    Adicional le invito a consultar los siguientes recursos:

    Guia para formular preguntas en el foro

    Channel 9- donde puedes encontrar una sección de: Administración de Windows 10

     

     

     

    Si tuviste problemas quizá desees abrir un caso de Soporte técnico profesional - https://support.microsoft.com/es-mx/help/4341255

      

    Gracias por usar los foros de TechNet.

    Erick Rivera

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 2 de mayo de 2019 17:37
  • Buenos dias Erick, gracias por responder.

    No tengo claro lo que me planteas. No me manejo con Powershell. Pero como la parte a la que me haces referencia parece ser sólo para dejar un log de referencia con las acciones realizadas, he probado a eliminar toda esta parte:

    Function Write-Log{
            Param(
            [parameter(mandatory=$true)]
            $Write
            )
            $date= get-date
            $day= $date.Day
            if($day -lt 10){
                $day="0"+$day
            }
            $month = $date.Month
            if($Month -lt 10){
                $Month="0"+$Month
            }
            $year= $date.Year
            $log= $env:USERPROFILE+"\DOCUMENTS\AddingAtributtesADServers"+$day+"_"+$month+"_"+$year+".log"
            $logfile= test-path -Path $log
            if ($logfile -eq $false){
                $titleLog= "action;CN;Company;AdminDescription;Comment;Department;Division;Location;Type"
                $titleLog > $Log
            }
            $write >> $log

    }#fin Write-Log

    Una vez eliminada, ejecuto el script y el mensaje de error obtenido es el siguiente:

    Set-ADComputer : No se puede validar el argumento del parámetro 'Identity'. El argumento es null. Proporcione un valor válido para el argumento e 
    intente ejecutar el comando de nuevo.
    En C:\infoservers2.ps1: 76 Carácter: 34
    +         Set-ADComputer -identity $srv -add @{"Company"="$company"} -e ...
    +                                  ~~~~
        + CategoryInfo          : InvalidData: (:) [Set-ADComputer], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.SetADComputer

    Esto corresponde a esta parte:    Set-ADComputer -identity $srv -add @{"Company"="$company"} -erroraction Continue

    que es prácticamente el ultimo bloque del script.Parece indicar que no le gusta el parámetro o la variable $srv, pero creo que está bien definida al inicio, y tambien en el .csv del que debe leer el valor.

    Un saludo,

    viernes, 3 de mayo de 2019 10:22
  • Hola Raul.Arias, te planteo una alternativa diferente

    ¿Conoces CSVDE.EXE? Permite cargar información desde un CSV

    El CSV debe tener en la primera línea los nombres internos de los campos

    Era la opción cuando no teníamos PowerShell :)

    Crear Usuarios en Forma Masiva y Con Atributos | WindowServer
    https://windowserver.wordpress.com/2014/09/03/crear-usuarios-en-forma-masiva-y-con-atributos/

     


    Guillermo Delprato
    Buenos Aires, Argentina
    El Blog de los paso a paso

    MCSE - MCSA2012
    MCITP: Enterprise Administrator / Server Administrator
    MCTS: Active Directory/Network Configuration/Applications Configuration/Server Virtualization/Windows 7 Configuration/Windows 7 & Office 2010 Deployment/Vista Configuration

    Este mensaje se proporciona "como está" sin garantías de ninguna clase. Usted asume todos los riesgos.

    viernes, 3 de mayo de 2019 11:38
  • Buenos dias Guillermo,

    No me importaria utilizar otra herramienta distinta de Powershell como la que me comentas, pero CSVDE no permite agregar info en los objetos:

    CSVDE is a command line utility that allows you to import and export, but not to modify or delete, entries into or from a Lightweight Directory Access Protocol (LDAP) repository, such as Active Directory Application Mode (ADAM), Active Directory Lightweight Directory Services (AD LDS), Active Directory, or Active Directory Domain Services (AD DS).

    Lo que necesito es agregar informacion en muchos objetos de AD, de ahí el intento de hacerlo con este script de powershell, leyendo de un fichero CSV.


    lunes, 6 de mayo de 2019 5:52
  • Hola Raúl, tienes razón, me equivoqué :(

    De "esa época" lo que sí permite modificaciones es LDIFDE.EXE pero el formato del archivo de entrada no es tan sencillo

    Si no te sirviera el que puso Erik, revisa en el repositorio de script que seguramente hay alguno

    http://gallery.technet.microsoft.com/

     


    Guillermo Delprato
    Buenos Aires, Argentina
    El Blog de los paso a paso

    MCSE - MCSA2012
    MCITP: Enterprise Administrator / Server Administrator
    MCTS: Active Directory/Network Configuration/Applications Configuration/Server Virtualization/Windows 7 Configuration/Windows 7 & Office 2010 Deployment/Vista Configuration

    Este mensaje se proporciona "como está" sin garantías de ninguna clase. Usted asume todos los riesgos.

    • Marcado como respuesta Raul.Arias miércoles, 8 de mayo de 2019 9:51
    lunes, 6 de mayo de 2019 11:38
  • Si, vi el LDIFDE.exe buscando documentacion sobre CSVDE, pero tiene un par de problemillas frente a este último. El principal es que no acepta archivos de entrada csv, con lo que tengo que montar un "carajal" para pasarle los datos. El otro, es que me ha parecido entender que no funciona con AD DS, es más para LDAP.

    Gracias por el enlace de repositorio de script, le echo un ojo a ver si puedo adaptar algo de alli. Si no, tocará hacer la modificación de los objetos a mano  :)

    Un saludo,

    miércoles, 8 de mayo de 2019 9:51
  • Hola el LDIFDE funciona en AD, o por lo menos funcionaba perfectamente en versiones anteriores

    Yo quise ser "polite" y por eso usé "archivo de entrada no es tan sencillo" :)

    Revisa esto a ver si sirve

    https://archive.codeplex.com/?p=admodify

    Yo lo he usado hace años y funcionaba muy bien

     


    Guillermo Delprato
    Buenos Aires, Argentina
    El Blog de los paso a paso

    MCSE - MCSA2012
    MCITP: Enterprise Administrator / Server Administrator
    MCTS: Active Directory/Network Configuration/Applications Configuration/Server Virtualization/Windows 7 Configuration/Windows 7 & Office 2010 Deployment/Vista Configuration

    Este mensaje se proporciona "como está" sin garantías de ninguna clase. Usted asume todos los riesgos.

    miércoles, 8 de mayo de 2019 11:31
  • Una ultima entrada...

    resulta que probando el script original, pero ejecutandolo desde c:, corre sin problemas.

    Asi que ya tenemos script para modificar lo siguientes campos para objetos servidores:

    CN,Company,BusinessRoles,Description,Department,Division,Location,Type

    Un saludo,

    viernes, 10 de mayo de 2019 7:19
  • Me alegro :)

     


    Guillermo Delprato
    Buenos Aires, Argentina
    El Blog de los paso a paso

    MCSE - MCSA2012
    MCITP: Enterprise Administrator / Server Administrator
    MCTS: Active Directory/Network Configuration/Applications Configuration/Server Virtualization/Windows 7 Configuration/Windows 7 & Office 2010 Deployment/Vista Configuration

    Este mensaje se proporciona "como está" sin garantías de ninguna clase. Usted asume todos los riesgos.

    viernes, 10 de mayo de 2019 11:07