none
Cambiar descripción user AD RRS feed

  • Pregunta

  • Buenos días,

    Tengo que cambiar diariamente la descripción de algunos usuarios en el AD, he creado un Script powerShell para que la información la extraiga de un fichero CSV, pero cuando lo ejecuta me da un error. Os pego el Script y el error por si vosotros me podéis ayudar.

    Script

    get-date 
    Import-Module ActiveDirectory
    $Users = Import-csv c:\scripts\description.csv
    foreach ($User in $Users)
    {
    Set-ADUser -Identity ($User.SamAccountName) -Description ($User.NewDescription)
    }

    Error

     

    Set-ADUser : No se puede validar el argumento del parámetro 'Identity'. El argumento es NULL. Proporcione un argumento no NULL e intente ejecutar el comando de nuevo.
    En C:\scripts\Change_description.ps1: 6 Carácter: 21
    + Set-ADUser -Identity <<<<  ($User.SamAccountName) -Description ($User.NewDescription)
        + CategoryInfo          : InvalidData: (:) [Set-ADUser], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.SetADUser

    Muchas Gracias.

    Saludos,.

    miércoles, 19 de octubre de 2016 8:36

Todas las respuestas

  • Hola,

    No nos pones la estructura de tu CSV, de modo que voy a suponer que viene a ser algo así:

    "SamAccountName","NewDescription"
    "Pepito","Descripcion de Pepito"
    "Juanito","Descricion de Juanito"

    En este caso, el comando:

    $Users = Import-csv c:\scripts\description.csv

    Te va a generar en la variable $Users un "PsCustomObject" que contendrá dos atributos para cada registro: el usuario y la descripción.

    De lo que se queja tu script es que le está llegando un nombre de usuario NULO.

    ¿Tiene tu CSV líneas en blanco o en alguna línea el nombre de usuario no aparece?

    Prueba a hacerlo así para que las líneas donde el usuario no aparece no eviten que se ejecute el resto:

    get-date 
    Import-Module ActiveDirectory
    $Users = Import-csv c:\scripts\description.csv
    foreach ($User in $Users)
    {
    	If ($User.SamAccountName)
    	{
    		Write-Output ("Actualizando el usuario " + $User.SamAccountName)
    		Set-ADUser -Identity ($User.SamAccountName) -Description ($User.NewDescription) 
    	}
    	Else
    	{
    		Write-Output "Se ha encontrado un error en la línea con el contenido $User"
    	}
    	
    }

    El IF impedirá que te dé error por identidad nula y por pantalla te saldrá la información sobre la líneas que dan error de modo que puedas localizarlas.

    Espero que te sirva.

    Un saludo.

    Diego





    miércoles, 19 de octubre de 2016 11:37