miércoles, mayo 17, 2017
jueves, mayo 11, 2017
Cambio de Zona horaria via GPO
Este año en chile tenemos una nueva zona horaria para el sur, la zona de magallanes, varios me han preguntado como automatizar via GPO el cambio a esta nueva zona, asi que aca esta la receta:
Crear un archivos .bat con el siguiente comando:
Publicadas por
Isabel de la Barra
a la/s
jueves, mayo 11, 2017
0
comentarios
Etiquetas: Active Directory, Scripts
lunes, septiembre 24, 2012
Cambiando a DHCP usando Politicas de Dominio
Una de las actividades que me ha tocado realizar al migrar una red que usa IP fija a DHCP es el como realizar masivamente el cambio en las estaciones de trabajo. Cuando son pocas no hay problemas, un chico de soporte puede manualmente cambiarlas y listo, pero cuando son 100, 200 o mas estaciones esto podria consumir bastantes horas de soporte para realizarlo
Una de las formas mas simples es a traves de una politica de dominio, el cambio de configuracion de la tarjeta de red requiere provilegios de administración sobre el equipo y probablemente no todos los usuarios son administradores de su equipo.
La forma mas simple es a traves de un ejecutable (un bat por ejemplo) que colocamos en la carpeta NETLOGON y lo agregamos en la politica en el startup del equipo y acostumbro tambien agregarlo en el login del usuario. Luego linkeamos la politica en la OU correspondiente donde estan los equipos donde deseamos se desean cambiar, mucho cuidado de no incluir en esta OU a los servidores, asi que no se les ocurra linkearlo a la raiz del dominio o usar la politica default del dominio.
El bat que usaremos sera algo parecido a lo siguiente:
netsh interface ip set address "Conexi¢n de rea local" dhcp
netsh interface ip set address "Conexión de área Local" dhcp
netsh interface ip set address "Conexion de area Local" dhcp
netsh interface ip set address "Local Area Connection" dhcp
netsh interface ip set dns "Conexi¢n de rea local" dhcp
netsh interface ip set dns "Conexión de área Local" dhcp
netsh interface ip set dns "Conexion de area Local" dhcp
netsh interface ip set dns "Local Area Connection" dhcp
Wow!! que onda! por que tantas lineas??
Pues no todos los equipos tienen el mismo nombre en la interfaz de red, por lo que inclui TODOS los posibles nombres que habian entre las estaciones de trabajo. Para aquellas lineas en que trata de cambiar uno que no existe aparecera el siguiente mensaje.
El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos.
Una de las cosas que me hizo perder algo de tiempo fue el tema de los acentos, en las version español de Windows el nombre de la interfaz tiene acento y aunque en el archivo bat los veia bien al ejecutar el comando se veia mal como lo muestra la siguiente imagen.
La solucion usada?? bueno, ya lo vieron en la imagen anterior, editar en aquellas estaciones que se ve mal el archivo usando el comando edit y corregir el nombre de la interfaz.
No es una solución elegante pero si practica :)
Ahora a poner mas bonito en script.
Saludos!
Isha
Publicadas por
Isabel de la Barra
a la/s
lunes, septiembre 24, 2012
0
comentarios
Etiquetas: Active Directory, DHCP, Scripts, Windows 7
lunes, noviembre 28, 2011
Cambio Masivo en AD con PowerShell
Holas!!
Hace tiempo que no escribia un articulo, andaba poco creativa, pero aprovechando que ando en unas mini vacaciones en Concepcion aprovechare de compartir un poco de Scripts.
Hace unos dias me pidieron crear un script para modificar la informacion de los usuarios en forma masiva, eran cerca de 800 usuarios a modificar y la informacion estaba en un excel.
Estuve buscando en el Script Center de Microsoft pero los que alli estan no me dejaban satisfechas, algunos campos podian ser modificados pero otros multivalor no podian hacerlo, ademas que se queria agregar la fotografia del usuario en el campo jpegPhoto.
En la consola PowerShell de Active Directory puedes encontrar el cmdlet Set-ADUser con el cual puedes modificar el usuario, identificas al usuario en forma unica con la cuenta, este es el atributo sAMAccountName, asi que colocamos -identity "usuario" a nuestro comando.
A continuacion identificamos que atributos necesitamos modificar, para el caso en que sea multiatributo y deseamos agregar, reemplazar o eliminar algun valor tambien lo podemos hacer usando add, replace, o remove indicando el atributo a modificar, por ejemplo -add @{Description = "Descripcion Agregada"}
Tambien, necesitamos cambiar el nombre del objeto en si (atributo cn) para lo cual usamos el cmdlet Rename-ADObject indicandole el usuario que deseamos renombrar.
Como queremos hacerlo para muchos usuarios, necesitamos generar un archivo csv, separados por comas, en que los nombres de las columnas indiquen los campos que queremos modificar, como ya vimos anteriormente, para parsear el archivo usamos en cmdlet import-csv y lo colocamos en una variable.
Otro problema que se nos presento es la fecha de expiracion de la cuenta, la cual al mirar el objeto nos percatamos que era el dia anterior, para eso hicimos el sucio truco de sumarle un dia (New-TimeSpan -Days 1) a la fecha entregada en el archivo.
Como ultimo desafio, nos quedo el cargar la foto, como el archivo es jpg, no hay un upload foto, asi que hubo que realizar una conversion del archivo a un formato binario ([Byte[]]$(Get-Content -Path "E:\usuario.jpg" -Encoding Byte -ReadCount 0) )
Con todos los ingredientes listos, nuestro script quedo asi:
$data = import-csv $args[0]
$fecha2 = New-TimeSpan -Days 1
foreach ($i in $data)
{
# Se le suma 1 dia a la fecha de expiracion para que lo cargue bien
$fecha = Get-Date $i.accountExpires
$fechaExpira = $fecha + $fecha2
# Renombra la cuenta al nuevo nombre
Get-ADUser -Identity $i.sAMAccountName | Rename-ADObject -NewName $i.DisplayName
# Actualiza los datos de la cuenta
Set-ADUser -identity $i.sAMAccountName -AccountExpirationDate $fechaExpira -Description "Descripcion" -Manager $i.manager -GivenName $i.givenName -Surname $i.sn -DisplayName $i.DisplayName -Company $i.Company -MobilePhone $i.mobile -Department $i.department -HomePhone $i.HomePhone -Title $i.title
#Agrega la Foto del Usuario
Set-ADUser -Identity $i.sAMAccountName -replace @{jpegPhoto = ([Byte[]]$(Get-Content -Path "E:\$i.sAMAccountName.jpg" -Encoding Byte -ReadCount 0) ) }
}
Saludos!!
Publicadas por
Isabel de la Barra
a la/s
lunes, noviembre 28, 2011
0
comentarios
Etiquetas: Active Directory, PowerShell, Scripts
lunes, agosto 15, 2011
Borrando una configuracion IMAP del perfil de Outlook
El desafio era, agregamos el perfil de exchange, pero como sacamos el perfil anterior??
Aca les dejo el script que contruimos, falta depurarlo, seguro se puede hacer en menos lineas, jejjee.
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_CURRENT_USER = &H80000001
Set Ws = WScript.CreateObject("WScript.Shell")
Dim ww
set ww=wscript.createobject("wscript.network")
nombreusu=ww.UserName
avalor = Array(1,1,1,1,1,1)
strComputer = "."
KeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\"
DefaultProfile="vacio"
On Error Resume Next
DefaultProfile = ws.RegRead("HKCU\" & KeyPath & "DefaultProfile")
If DefaultProfile = "vacio" Then
WScript.quit
End if
Call BuscaKey()
WScript.Quit
Sub BuscaKey()
'----------------------
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676"
oReg.EnumKey HKEY_CURRENT_USER,strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
WScript.Echo subkey
If eslakey(subkey) Then
aborrar = strKeyPath & "\" & subkey
oReg.DeleteKey HKEY_CURRENT_USER, aborrar
End if
Next
End sub
Private Function eslakey(subkey)
'-------------------------------
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\" & subkey
oReg.EnumValues HKEY_CURRENT_USER,strKeyPath, arrValueNames
For Each Valor In arrValueNames
If Valor = "IMAP Server" Then
imapserver = 1
End If
Next
eslakey = 0
if imapserver = 1 Then
strValueName = "IMAP Server"
oReg.GetBinaryValue HKEY_CURRENT_USER, strKeyPath, strValueName,strValue
imapsrv=strValue
email= ""
For i = lBound(strValue) to uBound(strValue)
If strvalue(i) <> 0 Then
email=email + Chr(strValue(i))
End If
Next
If LCase(email) = "mailserver.dominio.cl" or LCase(email) = "10.10.10.11" Then
eslakey = 1
End if
End If
End function
WScript.Quit
Saludos!
Isa
Publicadas por
Isabel de la Barra
a la/s
lunes, agosto 15, 2011
1 comentarios
viernes, diciembre 03, 2010
Ultima Conexion ..........
Ante una auditoria, necesitamos obtener para cada una de las cuentas del dominio, cuando fue la ultima conexion y validar tambien el estatus de la cuenta, si es que esta desabilitada, etc.
Este proceso tiene varios pasos, el primero de ellos es obtener la lista de los usuarios, esto lo podemos realizar de varias formas, usando algun programa ya hecho, usando scripts visual basic o power shell o usando algun comando que obtiene informacion de Active Directory. En esta ocasion, seleccione uno bien interesante y multiproposito: CSVDE
Este comando permite principalmente importar y exportar objetos en active directory, si quieres aprender mas sobre el puedes hacerlo en el siguiente link
Una vez seleccionado el comando esta la seleccion de los atributos que necesito, obtener una lista completa nos podria generar un archivo demasiado grande y engorroso de manipular, asi que mi lista reducida fue la siguiente: objectClass, userAccountControl, sAMAccountName, lastLogonTimestamp
objectClass me muestra el tipo de cuenta, me dice si la cuenta es user o computer.
userAccountControl me da el status de la cuenta mas adelante me explayo mas sobre este atributo.
sAMAccountName es el nombre de la cuenta.
lastLogonTimestamp es cuando fue la ultima conexion de la cuenta.
Este ultimo atributo, lastLogonTimestamp fue introducido en Windows Server 2003 para ayudar a identificar de forma mas certera los usuarios y equipos que se encuentran activos, cabe hacer notar que este datos tampoco es en tiempo real ya que la informacion debe ser actualizada por los demas domain controlers de la red pues a diferencia del atributo lastLogon, este es replicado.
El numero entregado por este atributo representa la intervalos de 100 nanosegundos transcurridos desde el 1ro de Enero de 1601, el codigo en vbs para transformar este numero a fecha es el siguiente:
set objLogon = objUser.Get("lastLogonTimestamp")
intLogonTime = objLogon.HighPart * (2^32) + objLogon.LowPart
intLogonTime = intLogonTime / (60 * 10000000)
intLogonTime = intLogonTime / 1440
WScript.Echo strADsPath & ";" & intLogonTime + #1/1/1601#
Si esa misma formula queremos usarla en excel usemos la siguiente:
Ingles: =IF(C2>0,C2/(8.64*10^11) - 109205,"")
Español: =SI(E2>0;E2/(8.64*10^11) - 109205;"")
ok! ya tenemos la lista de usuarios y tenemos el ultimo logon en formato de fecha :) nos esta faltando ahora saber si las cuentas estan desabilitadas o no o si ha expirado la password.
A traves del atributo userAccountControl podemos saber alguna informacion del estado de la cuenta, este atributo es una serie de bits que visualizamos como un numero en donde cada posicion representa una caracteristica que puede estar seteada en 1 o 0 el bit que en nuestro caso nos interesa es el segundo, ACCOUNTDISABLE, o sea, un usuario normal tendra el número 512 y si ese usuario esta desabilitado sera 514, si quieren saber mas detalle de este atributo pueden revisarlo en la siguiente link
Otro atributo que tambien nos puede ayudar y que nos indica si la cuenta esta con la password expirada o no es msDS-User-Account-Control-Computed pues el anterior aunque tiene la opcion de mostrar si tiene la password expirada no lo indica, para este caso, la columna representada por este atributo me mostrara un 8388608 que representa 0x800000 en hexadecimal y corresponde al status PASSWORD_EXPIRED
Bien, ya tengo identificados aquellos usuarios que no estan cumpliendo :)
Saludos!!
Isa
Publicadas por
Isabel de la Barra
a la/s
viernes, diciembre 03, 2010
0
comentarios
Etiquetas: Active Directory, Microsoft, Scripts
jueves, marzo 26, 2009
Enviando mail usando un script
Muchas veces me ha tocado configurar script que necesitan enviar mails e incluso atachar archivos al mismo, no es algo complicado y es facil de encontrar a traves de google, pero seguramente muchos no lo conocen y de seguro mas de alguien lo encontrara super practico :D
Como administradores es super util automatizar algunas tareas, los invito a visitar el Script Center de Microsoft donde encontraran este y muchos otros scripts muy utilies.
Este script usa CDO (Collaboration Data Objects), el codigo lo escribimos en un archivo de extension .vbs y lo ejecutamos usando el comando cscript.
Veamos ahora como armar este mail y enviarlo.
Primero que nada creamos el objeto que usaremos para enviar el mail, para ello crearemos una instancia que llamaremos objEmail que sera un objeto CDO.Message.
Cuando se envia un mail lo primero es indicar quien lo envia y a quien, esto se hace en los atributos From y To del objeto creado.
objEmail.From = "helpdesk@fabrikam.com"objEmail.To = "administrator@fabrikam.com"
Por supuesto esto no basta, necesitamos agregarle el tema y por supuesto el contenido del mensaje.
objEmail.Subject = "Server down"objEmail.Textbody = "Server1 is no longer accessible over the network."
Seguramente queremos tambien agregar algun archivo atachado a este mensaje.
objEmail.AddAttachment "C:\Scripts\Output.txt"Ya tenemos nuestro mail, ahora hay que enviarlo, una de las formas es usando un smtp local (IIS), con lo cual no necesitamos agregar nada mas a nuestro script, aunque si debemos configurar el smtp para que reciba los mails y lo reenvie a donde corresponda, pero si deseamos usar nuestro servidor de correo que ya tenemos funcionando debemos agregar unas lineas mas.
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "serversmtp"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
Algunos servidores por seguridad piden autenticacion, si este es el caso otro par de lineas nos ayuda con esto.
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "fabrikam\kenmyer"objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "&gr54#wgha"
Y por ultimo, enviamos el mail
objEmail.SendY ya estamos listos para ejecutar nuestro script.
Saludos!
Isa
Publicadas por
Isabel de la Barra
a la/s
jueves, marzo 26, 2009
2
comentarios
Etiquetas: Scripts

