Archivado en: ‘PowerShell’ .

Conexión Remote PowerShell 2.0 entre servidores

17 Agosto, 2010

powershell Conexión Remote PowerShell 2.0 entre servidores

Algo sencillo, pero útil.

Utilizando las máquinas dentro del mismo dominio utilizaremos lo siguiente:

En el servidor que queremos administrar configuraremos la conexión WINRM:

Get-Service winrm
Enable-PSRemoting -force
winrm s winrm/config/client ‘@{TrustedHosts=”*”}’
winrm quickconfig

En el servidor desde el que nos queremos conectar

Get-Service winrm
Enable-PSRemoting -force
winrm s winrm/config/client ‘@{TrustedHosts=”*”}’
winrm quickconfig

Conexión entre máquinas

New-PSSession -computername Servidor_al_que_conectarnos
get-PSSesion
enter-pssesion -ID Identificador_obtenido_con_el_Get-Pssession

NOTA:

TrustedHosts=”*” es una política que permite que servidores serán los que se puedan conectar remotamente, en ejemplo, ponemos un asterisco que equivale a te puedes coenctar desde cualquier máquina. Si necesitas filtrar las conexiones deberas personalizar este parámetro del servicio WINRM ( winrm /? ).

Pon color a tús script de powershell con write-host

2 Agosto, 2010

La verdad que haciendo algún script he necesitado últimamente que las salidas de la consola tengan un poco de estilo, la verdad que siempre los errores del mismo color y de la misma forma. Porqué no pintar las salidas por ejemplo con un backgroud diferente en algún color más representativo que la salida de la consola con el estilo standar.

Bien, pues podemos hacerlo con el cmdlet Write-Host y con el parámetro -background color.

Vamos a poner un ejemplo rápido para que pintéis vuestro script haciendo las salidas un poco más amigables o identificativas a un error. Vamos a pintar la salida de un srting con el fondo rojo:

write 300x17 Pon color a tús script de powershell con write host

Script busca contenido en archivo con PowerShell

31 Marzo, 2010

powershell Script busca contenido en archivo con PowerShell

Este script muy sencillo pero muy util para buscar contenido dentro de un archivo en powershell

Solo es necesario ejectura el script con los siguientes parámetros: Ruta_de_archivo_log  y  *texto_a_buscar*

EJEMPLO:

./busca_lineas.ps1 Ruta_de_archivo_log *texto_a_buscar*


» Leer más: Script busca contenido en archivo con PowerShell

Importar usuarios a AD con Powershell ( csv y txt )

30 Diciembre, 2009


Importación de usuarios en powershell desde un excel ( .csv ) o archivo de texto (.txt )

Nota: Es muy aconsejable antes de hacer la lectura de este post, haber comprendido perfectamente el artículo, creación de usuarios con powershell, ya que nos basamos en el para realizar esta operación. La única diferencia es que los datos los recogeremos de variables.

En primer lugar tenemos que tener una hoja de excel o bien un archivo separado por comas.

El formato del archivo tiene que ser delimitado por comas en el caso que sea un archivo de texto o delimitado por los campos de una hoja de excel. En la primera línea, colocaremos los metadatos a rellenar en DA, como si fuese una tabla de una bbdd y ordenados en las lineas de más abajo los datos que rellenaremos según los metadatos de la primera fila:

Metadato1, Metadato2, Metadato3 …

Valor1, Valor2, Valor3 …

Valor1, Valor2, Valor3 …

…etc

Un ejemplo práctico sería el siguiente:

cn,sAMAccountName,FirstName,LastName

Usuario1,usuario.1,Miguel, Martinez

Maria,maria.kill,maria,kill

Para realizar la importación utilizaremos el CMDLET: import-csv

Para esta operación , lo primero que haremos será meter dentro de una variable todo, de manera luego podamos trabajar con ella rápidamente. Vamos a realizarlo de la siguiente forma:

$datos= import-csv “Mis_Usuarios.csv”

Ahora tenemos todo el contenido de la hoja de excel dentro de la variable $datos. Los registros se irán devolviendo uno por uno, como cuando utilizamos un comando de powershell. Así que para realizar la importación y que devuelva todos los datos tendremos que hacer un “loop” con este objetivo, es decir un bucle, sino hacemos esto sólo nos devoverá la primera línea.

En powershell esto se hace con un “foreach” realmente es muy sencillo no te preocpes.

Quedémonos con esto:

foreach($CadaRegistro en $datos) {

Haz lo que sea

}

Diremos que este bucle realiza lo siguiente: Por cada registro que devuelva la variable $datos, es decir, cada registro de la hoja de excel, haces lo que sea, aquí colocaremos las sentencias para introducir el registro que se nos ha devuelto el foreach dentro del AD.

Para referirse a un campo concreto utilizaremos como siempre variable.propiedad ,es decir, si por ejemplo queremos extraer los CNs de la hoja de excel o del archivo de texto, utilizaremos $CadaRegistro.CN y nos devolverá todos los CN de la hoja de excel porque está dentro de un bucle “foreach”. Si lo hacemos sin el bucle sólo nos devolverá el CN del primer registro.

Haremos un ejemplo rápido:

PS C:\> foreach($CadaREgistro in $datos){write-host $CadaRegistro.cn}

Usuario1

Maria

Queremos ahora que nos devuelva el LastName, pues utilizaremos $CadaRegistro.LastName :

PS C:\> foreach($CadaRegistro in $datos){write-host $CadaRegistro.LastName}

Martinez

kill

Es importante tener en cuenta esto porque lo utilizaremos bastante en el script.

Ahora vamos a meter en una variable el CN ( Common Name )

CNs = $CadaRegistro.CN ( esto mete en la variable CNs el common name )

Conociendo el artículo ( Crear usuarios con Porwershell en DA ) vamos a proceder a crear el objeto USER oséa un CN solo utilizando el primer registro ( Ya que no utilzamos un bucle ).

Hemos creado la siguiente variable: CNs = $CadaRegistro.CN , esto almacena en la variable CNs el CN ( Common Name ) del primer registro de la hoja de excel, bien, pues utilizaremos el método “create” del ojeto ADSI para introducir este valor:

$objUser=$objOU.Create(“user”,”CN=”+$CNs)

Bien, espero que hayas entendido esto porque ahora vamos a proceder a realizar el script de importación, ten en cuenta como vamos a meter los datos dentro del script, vamos a realizarlo utilizando variables, estas serán cada uno de los valores de la hoja. Crearemos una variable por cada valor de cada una de las líneas:

Ejemplo lógico:

Metadato1, Metadato2, Metadato3 …

Valor1(Variable1), Valor2(Variable2), (Variable3)Valor3 …

Archivo

cn,sAMAccountName,FirstName,LastName

Usuario1,usuario.1,Miguel, Martinez

Maria,maria.kill,maria,kill

Variables

$cn=$CadaRegistro.cn, $sAMAccountName=$CadaRegistro. sAMAccountName, $FirstName=$CadaRegistro. FirstName …

—————————————————————————————————

Script:

# Creamos el objeto ADSI ( Realizando una consulta ) y lo metemos dentro de la varialbe objOU para utilizarlo:

$objOU=[ADSI]“LDAP://OU=People,DC=dominio,DC=priv”

# Metemos el objeto archivo a importar dentro de la variable: $CadaRegistro

$datos=import-csv “Mis_Usuarios.csv”

# Creamos el bucle y las variables para utilizar como hemos ejemplificado:

foreach($CadaRegistro in $datos) {

#Mapeamos las variables como hemos exlicado:

$cn=$CadaRegistro.cn

$sAMAccountName=$CadaRegistro.sAMAccountName

$givenName=$CadaRegistro.FirstName

$sn=$CadaRegistro.LastName

$displayName=$sn + “, ” + $givenName

$userPrincipalName=$givenName + “.” + $sn + “@dominio.priv”

#Creamos el usuario en el DA

$objUser=$objOU.Create(“user”,”CN=”+$cn)

$objUser.Put(“sAMAccountName”,$sAMAccountName)

$objUser.Put(“userPrincipalName”,$userPrincipalName)

$objUser.Put(“displayName”,$displayName)

$objUser.Put(“givenName”,$givenName)

$objUser.Put(“sn”,$sn)

$objUser.SetInfo()

# Habilitamos el usuario y cambiamos la contraseña

$objUser.SetPassword(“Carpintro1″)

$objUser.psbase.InvokeSet(“AccountDisabled”,$false)

$objUser.SetInfo()

}

—————————————————————————————————

IvanZito

Creación de usuarios en DA con Powershell

29 Diciembre, 2009

Crear usuarios con powershellps Creación de usuarios en DA con Powershell

Primero conecta al directorio activo, para conectar lo que hay que hacer es hacer una consulta que nos coloque en la unidad organizativa donde vamos a trabajar, para crear, por ejemplo un usuarios. Las consultas en powershell se hacen con el objeto ADSI de .NET.
Crearemos el objeto creando una variable con la consulta al AD utilizando una ruta DN de la siguiente manera. El ADSI se mete entre corchetes no es más que el tipo de datos que declaramos .
Con esto se creará el ojeto para ser utilizado ( Al crear un tipo de datos ADSI de Active Directory ) el cual es una variable con una consulta automáticamente se crea el objeto en memoria dentro de la variable y ya está listo para ser utilizado.
Creamos el objeto y nos colocamos dentro de la unidad organizativa: People
$objOU=[ADSI]“LDAP://OU=People,DC=dominio,DC=priv”

Ahora vamos a invocar al método para crear un objeto usuario. Hacemos referencia al médodo “crear” llamándole con la variable.metodo en este caso, la variable ya es el objeto que hemos creado en la linea anterior.

La llamada sería $objUser.create(). Es importante utilizar una ruta RDN ( Relative Domain Name ) ya que estamos colocados dentro de la OU People, esto lo hicimos cuando ya creamos el objeto. Si utilizamos una ruta DN como en el primer caso no podremos utilzarlo.
$objUser=$objOU.Create(“user”,”CN=Natalia Jimenez”)

Para rellenar un atributo, tendremos que hacer referencia al objeto llamando al método “Put” como hemos dicho llamaremos a los métodos en powershell objeto.metodo como el objeto está dentro de la variable, ya podemos utilizarlo de la siguiente manera $variable.put() o bien en el caso prático como veremos a continuación.
El parámetro que se le pasa al método “Put” es (“atributo”,”valor del atributo”). Fijaté en el siguiente punto:
$objUser.Put(“sAMAccountName”,”mary.north”)
Para terminar hacemos un commit de los datos almacenados en la variable.
Para ello utilizaremos el método SetInfo. Recuerda que será variable.metodo():

$objUser.SetInfo()
Algunos atributos más
Hay algunos atributos interesantes que debemos conocer, en todos utilizamos el método “put” para rellenarlos, fíjate que utilizamos en lugar de una cadena de texto ya una variable de manera que definiremos los “string” ( valores a introducir en el atributo ya arriba por medio de variables )
# Variables que vamos utilizar
$samAccountName = “Ivanzito”
$userPrincipalName = “ivanzito”
$diplayname= “Iván Ruiz”
…etc ( así con todas las variables )
# Metodo put
$objUser.put(“sAMAccountName”,$samAccountName)
$objUser.put(“userPrincipalName”,$userPrincipalName)
$objUser.put(“displayName”,$displayName)
$objUser.put(“givenName”,$givenName)
$objUser.put(“sn”,$sn)
$objUser.put(“description”,$description)
$objUser.put(“company”,$company)
$objUser.put(“department”,$department)
$objUser.put(“title”,$title)
$objUser.put(“mail”,$mail)
$objUser.SetInfo()
Para establecer el password lo haremos con:
$objUser.SetPassword(“C0mp!exP@ssw0rd”)
Para realizar una acción sobre el objeto llamaremos al método invokepsbas.invokeSet() con los valores “AcountDisabled” y $False en este caso para habilitar el usuario ya que este se crea deshabilitado.
$objUser.psbase.InvokeSet(“AccountDisabled”,$false)
$objUser.SetInfo()
Aquí te dejo un ejemplo que funciona perfecto, es muy imporate un concepto para que funcione. Tienes primero que crear el usuario y luego habilitar la cuenta y cambiar la contraseña. Si no se ha creado el objeto antes, no puedes realizar las dos últimas acciones:
—————————————————————————————————
# Aquí tienes un ejemplo muy sencillo
# Recuerda que tienes que cambiar la ruta DN en la primera línea
# Cambia el nombre en la segunda línea
# el nobre de la cuenta en la tercera
# Haz un commit en la última línea
$objOU=[ADSI]“LDAP://OU=People,DC=dominio,DC=priv”
$objUser=$objOU.Create(“user”,”CN=usr3″)
$objUser.Put(“sAMAccountName”,”usr.3″)
$objUser.SetInfo()
# Ya una vez que hemos creado el usuario, es ahora cuando cambiamos la contraseña y habilitamos el usuario.
$objUser.SetPassword(“Carpintero4″)
$objUser.psbase.InvokeSet(“AccountDisabled”,$false)
$objUser.SetInfo()
—————————————————————————————————

IvanZito


-->