## Preguntar nombre de usuario
Write-Host ""
Write-Host "Consulta eventos usuario bloqueado en eventos"
Write-Host ""
Write-Host ""
Write-Host ""
#Pregunta por el nombre del usuario
$Username = Read-Host "Introduzca el nombre del usuario"
## Encontrar el controlador de dominio
$Pdce = (Get-AdDomain).PDCEmulator
## Construye los parámetros para consultar Get-WinEvent
$GweParams = @{
‘Computername’ = $Pdce
‘LogName’ = ‘Security’
‘FilterXPath’ = "*[System[EventID=4740] and EventData[Data[@Name='TargetUserName']='$Username']]"
}
## Instrucción de la consulta
$Events = Get-WinEvent @GweParams
Mostrando entradas con la etiqueta powershell. Mostrar todas las entradas
Mostrando entradas con la etiqueta powershell. Mostrar todas las entradas
jueves, 25 de octubre de 2018
Powershell para consulta de bloqueos en AD
Con esta pequeña consulta powershell y teniendo los permisos adecuados la consulta del evento registrado que ocasiona un bloqueo del usuario de windows será cuestion de segundos.
viernes, 7 de octubre de 2016
Powershell script para ver bloqueos, cambiar contraseña y desbloquear usuarios de AD
Hay veces en la que no nos interesa dejar la consola de administracion de Active Directory para funciones simples como desbloquear y cambiar contraseñas de usuarios.
Para ello es puede ser muy util el siguiente Powershell Script que realiza las siguientes funciones:
- Muestra sólo los usuarios bloqueados (pudiendo omitir ciertos powerusers)
- Permite desbloquear usuario
- Permite cambiar contraseña usuario
- Permite desbloquear y cambiar contraseña
- Permite desbloquear, cambiar contraseña y marcar cambiar contraseña en el siguiente logon
Todo ello con un array de nuestros controladores de dominio, útil si hay dispersión geografica y algún que otro control de errores básico.
Para ello es puede ser muy util el siguiente Powershell Script que realiza las siguientes funciones:
- Muestra sólo los usuarios bloqueados (pudiendo omitir ciertos powerusers)
- Permite desbloquear usuario
- Permite cambiar contraseña usuario
- Permite desbloquear y cambiar contraseña
- Permite desbloquear, cambiar contraseña y marcar cambiar contraseña en el siguiente logon
Todo ello con un array de nuestros controladores de dominio, útil si hay dispersión geografica y algún que otro control de errores básico.
<#
Author: Miguel Varona - Alberto Molero
Date: 05/10/2016
Version: 2.0
Descripción
Herramienta para identificar bloqueos en AD, desbloquear usuario y porporcionarle nueva contraseña.
UPDATED 06/10/2016
Añadimos opción de cambiar password, establecer cambio en siguiente logon y desbloquear.
UPDATED 05/10/2016
Añadimos los usuarios a excluir en la lista de bloqueos.
#>
#Importa el modulo de Active Directory
Import-Module ActiveDirectory
Write-Host ""
Write-Host "PowerShell AD Password Tool"
Write-Host ""
Write-Host "Herramienta de comprobación de expiración y bloqueo de cuentas de AD"
Write-Host "Status. Te permitirá desbloquear y/o establecer una nueva contraseña"
Write-Host ""
Write-Host ""
###########################
## FUNCIONES ##
###########################
#################################
### unlockAndCheck function ###
#################################
#Esta funcion desbloquea el usuario definido el los DCs de la lista $servers array, despues comprueba que esta desbloqueado.
function unlockAndCheck {
foreach ($server in $servers) {
Try {
Write-Host "Desbloqueando usuario en $server"
Unlock-ADAccount -Identity $user -server $server
}catch{
}
}
#Consigue el status de bloqueo y lo marca en la variable $Lock
$Lock = (Get-ADUser -Filter {samAccountName -eq $user } -Properties * |
Select-Object -expand lockedout)
Write-Host ""
#Dependiendo del estatus, muestra si el usuario esta bloqueado o no.
switch ($Lock) {
"False" { Write-Host "$user El usuario está BLOQUEADO." }
"True" { Write-Host "$user El usuario no está bloqueado." }
}
}
############################
### resetPass function ###
############################
#Esta función cambia la contraseña del usuario definicdo en los DCs del $server array.
function resetPass {
$newpass = (Read-Host -AsSecureString "Introduzaca nueva contraseña")
foreach ($server in $servers) {
Write-Host "Cambiando Contraseña en $server"
Set-ADAccountPassword -Server $server -Identity $user -NewPassword $newpass
}
Write-Host ""
Write-Host "Contraseña de $user cambiada."
Write-Host ""
}
##################################################
### resetPassand changenextlogon function ###
##################################################
##Esta función cambia la contraseña del usuario definicdo en los DCs del $server array y añade la opción de cambiar contrasseña en el siguiente logon.
function resetPasschange {
$newpass = (Read-Host -AsSecureString "Introduzaca nueva contraseña")
foreach ($server in $servers) {
Write-Host "Cambiando Contraseña en $server"
Set-ADAccountPassword -Server $server -Identity $user -NewPassword $newpass ; Set-ADUser -Identity $user -ChangePasswordAtLogon $true
}
Write-Host ""
Write-Host "Contraseña de $user cambiada."
Write-Host ""
}
###########################
## End FUNCTIONS ##
###########################
#############################################
## Definir los Controladores de Dominio ##
#############################################
<#
Si disponemos de mas de un DC y repartidos Geográficamente esta lista nos ahorra
el tiempo de replica para el cambio y desbloqueo de contraseña.
----> Importante: Mantener la lista si los mismos cambian.
#>
#Creating Empty $servers Array
$servers = New-Object System.Collections.ArrayList
#Creating Empty $unavailable Array
$unavailable = New-Object System.Collections.ArrayList
#Assign Domain Controllers to $servers Array
$servers.add("servidor.dominio.local") | out-null
# NOTA: Puedes añadir más, copiando la linea justo debajo.
##################################################
## Comprobacion de usuarios bloqueados en AD ##
##################################################
#Cuenta cuantas cuentas bloqueadas hay en DC local y lo establece en la variable $count
$count = Search-ADAccount –LockedOut | where { $_.Name -ne "Administrator" -and $_.Name -ne "Guest" -and $_.Name -ne "SAU" -and $_.Name -ne "Otrousuario" -and $_.Name -ne "Otrousuario" -and $_.Name -ne "obs_int_svc" -and $_.Name -ne "Otrousuario" -and $_.Name -ne "Invitado" } |
Measure-Object | Select-Object -expand Count
#Si hay cuentas bloqueadas (exceptuando administrator, invitado y otras,las muestra.
If ( $count -gt 0 ) {
Write-Host "Cuentas Bloqueadas actualmente en el Dominio:"
Search-ADAccount –LockedOut | where { $_.Name -ne "Administrator" -and $_.Name -ne "Guest" -and $_.Name -ne "SAU" -and $_.Name -ne "Seguridad" -and $_.Name -ne "Formacion" -and $_.Name -ne "obs_int_svc" -and $_.Name -ne "test.operador" -and $_.Name -ne "Invitado" } |
Select-Object Name, @{Expression={$_.SamAccountName};Label="Username"},@{Expression={$_.physicalDeliveryOfficeName};Label="Office Location"},@{Expression={$_.LastLogonDate};Label="Fecha de último acceso."} | Format-Table -AutoSize
}else{
# Write-Host "No tiene cuentas bloqueadas en el dominio."
}
Write-Host ""
###########################################
## Pregunta por el nombre del usuario ##
###########################################
#Pregunta por el nombre de usuario
$user = Read-Host "Introduzca el nombre de usuario que quieres comprobar o pulsa [CTR+C] para salir."
[int]$Checker1 = 0
# Control de errores
Do {
# Try to retrieve info for given user, catch error if unalbe to retrieve
Try {
# Attempt to retrieve info about user and suppress output
Get-ADUser -Identity $user | Out-Null
# If successful, set Checker to 1 to exi do loop.
$Checker1 = 1
}catch{
# If Attempt to retrieve info fails, run code in this catch block
#Username entered was not found. Have user try again.
cls
Write-Host ""
Write-Host ""
Write-Host "Cuenta de usuario no encontrada! - Comprueba el nombre y vuelve a intentar." -BackgroundColor Red -ForegroundColor White
Write-Host ""
$user = Read-Host "Introduzca el nombre de usuario que quieres comprobar o pulsa [CTR+C] para salir."
}
# If Checker1 is equal to zero, then redo Do loop.
}While ($Checker1 -eq 0)
#############################################################
## HAce un get para mostrar la informacion del usuario ##
#############################################################
#Once a valid user is entered, proceed with remaining code
cls
Write-Host ""
Write-Host ""
# Hace un get para el nombre de usuario
$Name = (Get-ADUser -Filter {samAccountName -eq $user } -Properties * | Select-Object -expand DisplayName)
# Gets Phone number of entered user (linea comentada porque no utilizamos el campo, puede ser útil en un futuro.)
#$phone = (Get-ADUser -Filter {samAccountName -eq $user } -Properties * | Select-Object -expand telephoneNumber)
# Displays the Display Name and Phone number of user - I use this to verify I have the correct user and
# to have the phone number available, if I need to contact the user.
#Write-Host "$Name's phone number is: $phone"
Write-Host ""
Write-Host ""
####################################################################
## Hace un get para la antiguedad de la contraseña y la muestra ##
####################################################################
# Get-date para Fecha de hoy
[datetime]$today = (get-date)
#Get pwdlastset fecha del AD para la variable $passdate2
$passdate2 = [datetime]::fromfiletime((Get-ADUser -Filter {samAccountName -eq $user } -Properties * |
Select-Object -expand pwdlastset))
#Calcula la contraseña en dias
$PwdAge = ($today - $passdate2).Days
#Comprueba si es mas antigua de 30 dias
If ($PwdAge -gt 31){
# Si es mas antigua de 30 días informa que está expirada y la muestra
Write-Host "Contraseña de $user ha EXPIRADO!"
Write-Host "Contrasela de $user tiene una antiguedad de $PwdAge dias "
}else{
# Si es menor de 30 dias muestra la antiguedad
Write-Host "COntraseña de $user tiene una antiguedad de $PwdAge dias "
}
Write-Host ""
Write-Host ""
########################################################
## Estado del bloqueo en cada servidor disponible ##
########################################################
#Comprueba la disponibilidad de los servidores y el estado del bloqueo de la cuenta de usuario. (ojo ping trafico permitido)
foreach ($object in $servers) {
# ERROR CHECKING
Try{
# Check to see if server is available via a ping
ping $object -n 1 | Out-Null
# If server is available, complete code:
switch (Get-ADUser -server $object -Filter {samAccountName -eq $user } -Properties * |
Select-Object -expand lockedout) {
"False" {"$object `t `t Not Locked"}
"True" {"$object `t `t LOCKED"}
}
}catch{
# If server is not available, alert admin that it will be skipped.
Write-host "$object `t `t NOT Found - Skipping" -ForegroundColor white -BackgroundColor red
# Add unavailible server to $unavailible array
$unavailable.add($object) | out-null
}
}
##############################################################
## $servers Control de disponibilidad de servidores ##
##############################################################
<#
Para cada servidor en el array que no este disponible lo elimina del array
con el fin de que el script no de error por time out. Otro pequeño control
de errores.
#>
foreach ($server in $unavailable){
$servers.Remove($server)
}
##############################################
## Preguntar que opción quiere escoger ##
##############################################
Write-Host ""
Write-Host ""
$option = Read-Host "¿Quieres (1) Desbloquear el usuario, (2) Resetear la contraseña del usuario, (3) Desbloquear y resetear contraseña o (4) Desbloquear, resetear y cambiar en el logon siguiente (5) Salir?"
##########################################
## Llevar a cabo la opción escogida ##
##########################################
cls
[int]$checker2 = 0
While ($checker2 -eq 0) {
switch ($option){
"1" {
#Call unlockAndCheck Function
unlockAndCheck
Write-Host ""
Write-Host "Pulsa cualqueir tecla para salir."
$checker2 +=6
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}
"2" {
#call resetPass function
resetPass
Write-Host ""
Write-Host "Pulsa cualqueir tecla para salir."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
$checker2 += 6
}
"3" {
#call resetPass function
resetPass
#Call unlockAndCheck Function
unlockAndCheck
Write-Host ""
Write-Host "Pulsa cualqueir tecla para salir."
$checker2 += 6
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}
"4" {
#call resetPasschange function
resetPasschange
#Call unlockAndCheck Function
unlockAndCheck
Write-Host ""
Write-Host "Pulsa cualqueir tecla para salir."
$checker2 += 6
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}
"5" {
#exit code
$checker2 += 6
}
default {
Write-Host ""
Write-Host ""
Write-Host "Ha seleccionado un número incorrecto." -BackgroundColor Red -ForegroundColor White
Write-Host ""
$option = Read-Host "¿Quieres (1) Desbloquear el usuario, (2) Resetear la contraseña del usuario, (3) Desbloquear y resetear contraseña o (4) Desbloquear, resetear y cambiar en el logon siguiente (5) Salir?"
}
}
}
lunes, 27 de abril de 2015
Breve - Saber si una cuenta de equipo esta desactivada en AD mediante Powershell
Cuando sospechamos que un equipo esta "disable" en Active directory podemos realizar la siguiente consulta:
dsquery computer -disabled
Y nos aparecerán los equipos desactivados. Ahora tan sólo debemos habilitar la cuenta del equipo desde la consola.
Si volvemos a pedir la consulta no nos debería aparecer.
dsquery computer -disabled
Y nos aparecerán los equipos desactivados. Ahora tan sólo debemos habilitar la cuenta del equipo desde la consola.
Si volvemos a pedir la consulta no nos debería aparecer.
miércoles, 8 de octubre de 2014
BREVE - Making windows server 2012 to full gui server
It's easy as in powershell type:
Install-WindowsFeature Server-Gui-Mgmt-Infra,Server-Gui-Shell –Restart
To backwards:
Uninstall-WindowsFeature Server-Gui-Mgmt-Infra,Server-Gui-Shell -Restart
Install-WindowsFeature Server-Gui-Mgmt-Infra,Server-Gui-Shell –Restart
To backwards:
Uninstall-WindowsFeature Server-Gui-Mgmt-Infra,Server-Gui-Shell -Restart
Suscribirse a:
Entradas (Atom)
Tags
100 consejos
2 steps trouble
50gb cloud free
acceso remoto
acronis
active directory
activex
AD
administracion linux
alta dyndns.com
analytics
android
ape
APN
apt-get
articulo request tracker 4
auditoria
auditoría wireless
b2b
Backup
backup on line
backup online
Backupify
banco de españa
Bancos
bash
bat
bitlocker
blogger_TID
bloqueo usuario
boomerang
box
box.net
broute
btrieve
bugtraking
bussines
caducado
cálculo
callrecorder
camara ip
cambios
catastro
certificados
Chrome
cif
Citrix
Cloud
cloud backup
cloud computing
cloud server
cloudring
cloudringapp.com
cluod storage
cmd
cms
CNMV
comandos
comercio electroinco
Comisiones TPV
computing
condiciones tienda
consola
contraseña root
cookie
cookies
Copia de seguridad
copia seguridad
correo
correo electronico
correo eléctronico
cpu
creacion servidor
crm
CSS
desastre
diagramly
diferido
directorio activo
directorios
disable
dmesg
Docs
DOS
drivers
dropbox
dropittome
dropsync
du
du -sch
dyndns
e-commerce
e-commerce mail shop
ecommerce
enviar mas tarde
envío
escritorio compartido
esquemas
estructura
etiquetas inteligentes
excel
excepciones
exclude dropbox
exec
Execpciones Java
fhs
ficheros
find
firewall
firma
fiscal
flujo
for
formulario
formularios
free space
ftp
gdocs
gdrive
gmail
gmail 2 pasos problema
godaddy
google apps
google drive
google history
google search
google+
GOYSCRIPT
grabación de llamadas
hacienda
hang-out
hangout
hoja
host dinamico
i.e
iass
indra
intalacion webmin
interfaz metro
internet explorer
ip dinamica
ipcam
iva e-commerce
Java
joomla
LAMP
LDAP
ley
ley blogger
ley cookies
libros
limpiar ubuntu
linux
linux password
linux root
logística
LPIC
mail
mail notification
mail server
mamp
MCSA
memoria alta
microsoft
Ministerio Justicia
Mis Documentos copia de seguridad
molero
monitor rendimiento
montar usb
mount
mrw
mta
multishop
mx
Mysql
net use
NFC
notificacion
notificaciones
novell 5.1
nube
nube hibrida
nube privada
nube publica
objetivo web
Office
on line
Oracle
organizaciones
paas
Pasarela de pago
password root
PAW
pearltrees
pedidos
perfmon
portapapeles
postfix
postfix gmail
powershell
precio
prerequisitos ecommerce
prestashop
privacidad
privacidad datos
programación correo electrónico
protección de datos
proxy
psexec
puertos
purgar
pymes
rackspace
rackspace.com
recover root
recovery password linux
recuperar root password
recursos
redirección
registradores.org
registro
registry
remoto
rendimiento. windows 7
request tracker
request tracker 4 article
RESEVI
ring
rkhunter
root linux
root password
root ubuntu
rootkit
router
rt
saas
sals
scheduled task
script
scripting
scripts
Secure SSH
seguimiento
seguridad
send later
server
sincronización
siret
sitios seguros
skydrive
smalll server
smartphone
smtp
smtp gmail relay
smtp notification
SSH
ssl
substitución
system
systernals
tamaño directorio
telefónica
templates
thatwe
thunderbird
ticketing
tienda online
tienda virtual
tienda web
token
TPV virtual
track
translation
two steps verification
ubuntu
ubuntu 12
ubuntu gmail relay
unix
upload
urdangarín
usb
usbdisk ubuntu
usuario
validate.tpl
variable
VDA
VDAAGENT
verificación dos pasos
vi
virtual appliance
virtualización novell
visio
vmware
vritualdesktop
w8
w8 gmail
Wannacry
webdav
webmaster tools
webmin
websigner
websigner.cab
wifislax
windos azure
windows
windows 7
windows 8
Windows Azure
windows2012
windows8
wordpress
workstation
WPA
xampp
xargs
XENDESKTOP
zimbra on rackspace