Lo hice en vbscript porque los clientes no tienen powershell.
'**************************************************
' Agregar PC al Dominio.
' Autor: Jorge Mestre
' Fecha: 26/06/08
' Descripción: Agrega un PC al dominio.
'
'**************************************************
'objeto para obtener el nombre de usuario actual
set net = WScript.CreateObject("WSCript.Network")
'objeto para los inputbox
Set WSHShell = WScript.CreateObject("WScript.Shell")
'Definiciones por defecto
pcDef = "testprep"
domDef = "lab.dominio.local"
OUDef = "OU=PCs"
userDef = Net.UserName
userLocalDef = "Administrator"
'inputbox PC
pc = InputBox("introduzca el HOSTNAME del PC", _
"Introducir hostname del PC",pcDef)
'saliendo por no poner ningún hostname
If pc = "..." or pc = "" Then
WScript.Echo "no se indicó ningún hostname, saliendo..."
WScript.Quit()
End If
'check pc
wscript.echo "PC: " & pc
'revisando que se llega al PC
If Ping(pc) = False then
wscript.Echo pc & " no responde a PING..."
Wscript.Quit()
end If
'inputbox Dominio
dominio = InputBox("introduzca el DOMINIO (formato DNS) " & _
"al que debe pertenecer " & pc, _
"Introducir dominio para " & pc,domDef)
'saliendo por no poner dominio
If dominio = "..." or dominio = "" Then
WScript.Echo "no se indicó ningún dominio, saliendo..."
WScript.Quit()
End If
'comprobar que se introdujeron "." con el nombre de dominio
If Instr(dominio, ".") = 0 Then
wscript.echo "el dominio debe estar indicado como " & _
"subdominio.dominio - Ejemplo: es.prueba.com"
wscript.Quit()
End If
'check dominio
wscript.echo "Dominio: " & dominio
' Introducir OU
ou = InputBox("introduzca la OU: Ej: OU=Workstations," & _
"OU=Standard","Introducir OU",OUDef)
'pedir usuario dominio / por defecto, poner el nombre
'de usuario actual en el inputbox
user = InputBox("introduzca un usuario con permisos para " & _
"agregar " & pc & " al dominio " & dominio, _
"Introducir usuario de DOMINIO",userDef)
'pedir password
msg=MsgBox("introducir el password en la consola luego de " &_
"este mensaje",0,"password en consola")
Set objPassword = CreateObject("ScriptPW.Password")
WScript.StdOut.Write "Contraseña para " & user & " (DOMINIO):"
pass = objPassword.GetPassword()
'pedir admin local pc
userLocal = InputBox("introduzca un usuario con permisos " & _
"LOCALES en " & pc & " (por ejemplo el " & _
"administrador local ","Introducir usuario LOCAL" _
,userLocalDef)
'pedir password usuario local
msg=MsgBox("introducir el password para el usuario LOCAL " & _
"de " & pc & " en la consola luego de este " & _
"mensaje",0,"password en consola de usuario LOCAL")
Set objPassword = CreateObject("ScriptPW.Password")
WScript.StdOut.Write VbCrLf & "Contraseña para " & _
userLocal & " (LOCAL):"
passLocal = objPassword.GetPassword()
' confirmar datos
confirmar=MsgBox("¿Son los siguientes datos correctos?" & _
VbCrLf & VbCrLf & "PC: " & pc & VbCrLf & _
"Dominio: " & dominio & " (" & ou & ")" & VbCrLf & _
"Usuario Dominio: " & user & VbCrLf & _
"Usuario Local: " & userLocal & VbCrLf _
,1,"Confirmar datos")
if confirmar = 2 then
msg=MsgBox("proceso cancelado",0,"Cancelado")
wscript.quit()
end if
reiniciar = MsgBox("¿Desea reiniciar " & pc & _
" luego de agregarlo a dominio?" & VbCrLf & _
VbCrLf & "(Es Necesario, " & _
"pero quizas es conveniente mas tarde)",4, _
"¿Reiniciar?")
Set objShell = CreateObject("WScript.Shell")
if reiniciar = 1 then
strCmdNetDom = "%comspec% /c netdom join " & pc & _
" /Domain:" & dominio & _
" /userD:" & user & _
" /passwordD:" & pass & _
" /OU:" & ou & _
" /userO:" & userLocal & _
" /PasswordO:" & passLocal & _
" /reboot"
else
strCmdNetDom = "%comspec% /c netdom join " & pc & _
" /Domain:" & dominio & _
" /userD:" & user & _
" /passwordD:" & pass & _
" /OU:" & ou & _
" /userO:" & userLocal & _
" /PasswordO:" & passLocal
End if
Set objExecObj = objShell.Exec(strCmdNetDom)
strResNetDom = objExecObj.StdOut.ReadAll()
resultado = MsgBox ("Resultado" & vbcrlf & strResNetDom)
' Función para hacer Ping
Function Ping(pc)
Set objShell = CreateObject("WScript.Shell")
strCmdPing = "%comspec% /c ping -n 1 " & pc & ""
Set objExecObj = objShell.Exec(strCmdPing)
strResPing = objExecObj.StdOut.ReadAll()
If Instr(strResPing, "Respuesta") > 0 Then
Ping = True
Else
Ping = False
End If
End Function
Pasar un formato personalizado de fecha a powershell
$fechaPer = "20081005"
$fechaFormateado = [datetime]::ParseExact($fechaRaw,'yyyyMMdd',$null)
$fecha = get-date $fechaFormateado -format dd/MM/yyyy
fecha contiene un valor tipo "Date" válido, obtenido del string $fechaPer y formateado con el método ParseExact.
$fechaFormateado = [datetime]::ParseExact($fechaRaw,'yyyyMMdd',$null)
$fecha = get-date $fechaFormateado -format dd/MM/yyyy
fecha contiene un valor tipo "Date" válido, obtenido del string $fechaPer y formateado con el método ParseExact.
Categorias:
powershell,
vbscript
VirtualWin - Desktops virtuales en Windows
aqui pueden descargarlo. Está muy bueno, con la tecla Win+flechitas cambian de escritorio.
función para escribir logs
Lo acabo de hacer, y me pareció útil guardarlo por aqui:
# archivo con fecha ej: log_20030318.log
$ArchLog = "log_"+"$(get-date -format yyyyMMdd)"+".log"
function escLog($texto){
write-output "$(get-date -format hh:mm:ss): $texto" |
out-file -encoding ascii -append $ArchLog
}
#pruebas
escLog "Incio LOG"
sleep 2
escLog "Otra Linea"
sleep 5
escLog "2+2 son $(2+2)"
la salida es:
11:34:14: Incio LOG
11:34:16: Otra Linea
11:34:21: 2+2 son 4
# archivo con fecha ej: log_20030318.log
$ArchLog = "log_"+"$(get-date -format yyyyMMdd)"+".log"
function escLog($texto){
write-output "$(get-date -format hh:mm:ss): $texto" |
out-file -encoding ascii -append $ArchLog
}
#pruebas
escLog "Incio LOG"
sleep 2
escLog "Otra Linea"
sleep 5
escLog "2+2 son $(2+2)"
la salida es:
11:34:14: Incio LOG
11:34:16: Otra Linea
11:34:21: 2+2 son 4
Categorias:
active directory,
powershell
mostrar traps snmp
param($lista)
$arch = ".\salida.csv"
"hostname`tcomunidad`ttrap`tvalor" > $arch
function check-ping ([string]$pc) {
$HostVivo = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$pc'"
if (($HostVivo.StatusCode -ne "0") -or ($pc -eq $null)){
return $false
}
else{
return $true
}
}
function nulo ($txthost,$txtout){
write-host "$txthost" -fore cyan
write-output "txtout" out-file -append $arch
}
$listaS = gc $lista
foreach ($s in $listaS){
if (-not $(check-ping $s)){nulo "$s`tno responde (por wmi)" "$s`tno responde (por wmi)";continue}
$baseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $s)
$key = $baseKey.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\SNMP\\Parameters\\TrapConfiguration", $false)
if ($key -eq $null){nulo "$s`t$dirBase no existe" "$s`t$dirBase no existe";continue}
$comunidades = $key.GetSubKeyNames()
if ($comunidades -eq $null){nulo "$s`tNo hay comunidades definidas" "$s`tno hay comunidades definidas";continue}
foreach ($comunidad in $comunidades){
$com = $Key.OpenSubKey("$comunidad", $false)
$traps = $com.getValueNames()
if ($traps -eq $null){nulo "$s`tNo hay traps configurados definidos en la comunidad $com" "$s`tNo hay traps definidos en la comunidad $com";continue}
foreach ($trap in $traps){
$val = $com.GetValue($trap)
}
write-output "$s`t$comunidad`t$trap`t$val" out-file -append $arch
write-host "`t$s" -fore cyan
write-host "`t`tcomunidad: $comunidad" -fore green
write-host "`t`t trap: $trap" -fore green
write-host "`t`t valor: $val`n" -fore green
}
}
$com.Close()
$key.Close()
$baseKey.Close()
$arch = ".\salida.csv"
"hostname`tcomunidad`ttrap`tvalor" > $arch
function check-ping ([string]$pc) {
$HostVivo = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$pc'"
if (($HostVivo.StatusCode -ne "0") -or ($pc -eq $null)){
return $false
}
else{
return $true
}
}
function nulo ($txthost,$txtout){
write-host "$txthost" -fore cyan
write-output "txtout" out-file -append $arch
}
$listaS = gc $lista
foreach ($s in $listaS){
if (-not $(check-ping $s)){nulo "$s`tno responde (por wmi)" "$s`tno responde (por wmi)";continue}
$baseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $s)
$key = $baseKey.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\SNMP\\Parameters\\TrapConfiguration", $false)
if ($key -eq $null){nulo "$s`t$dirBase no existe" "$s`t$dirBase no existe";continue}
$comunidades = $key.GetSubKeyNames()
if ($comunidades -eq $null){nulo "$s`tNo hay comunidades definidas" "$s`tno hay comunidades definidas";continue}
foreach ($comunidad in $comunidades){
$com = $Key.OpenSubKey("$comunidad", $false)
$traps = $com.getValueNames()
if ($traps -eq $null){nulo "$s`tNo hay traps configurados definidos en la comunidad $com" "$s`tNo hay traps definidos en la comunidad $com";continue}
foreach ($trap in $traps){
$val = $com.GetValue($trap)
}
write-output "$s`t$comunidad`t$trap`t$val" out-file -append $arch
write-host "`t$s" -fore cyan
write-host "`t`tcomunidad: $comunidad" -fore green
write-host "`t`t trap: $trap" -fore green
write-host "`t`t valor: $val`n" -fore green
}
}
$com.Close()
$key.Close()
$baseKey.Close()
Categorias:
active directory,
powershell
Suscribirse a:
Entradas (Atom)