Anda di halaman 1dari 24

2012

SCRIPTS POWERSHELL

Javier Garca Cambronel SEGUNDO DE ASIR 28/02/2012

[SCRIPTS POWERSHELL] 28 de febrero de 2012

INSTALACIN Y CONFIGURACIN DE POWERSHELL SCRIPTS PARA LA ADMINISTRACION DE ACTIVE DIRECTORY

SCRIPTS SOBRE EL SISTEMA

SEGUNDO DE ASIR

Pgina 1

[SCRIPTS POWERSHELL] 28 de febrero de 2012

INSTALACIN Y CONFIGURACIN DE POWERSHELL


Bueno, lo normal, es que si tenemos Windows server 2008 actualizado, ya tengamos Windows poweshell, pues lo instala con una de estas actualizaciones, es de suponer que en siguientes Windows server como el 2012 ya vendr preinstalada, al igual que pasa con Windows7 que viene por defecto. Si no tenemos Windows powershell instalado, lo que hacemos ser dirigirnos, a administracin del servidor a Caractersticas y una vez que hemos pulsado en caractersticas le diremos que agregar caractersticas

Marcaramos Windows powershell, y pulsaramos en siguiente, para llevar a cabo la instalacin. Des pues de que terminara la instalacin, ya podramos ejecutar Windows powershell sin problemas.

SEGUNDO DE ASIR

Pgina 2

[SCRIPTS POWERSHELL] 28 de febrero de 2012


Lo encontraremos sin problemas, solo escribiendo en el cuadro de bsqueda situado en la barra de inicio y procederemos a ejecutarlo.

SEGUNDO DE ASIR

Pgina 3

[SCRIPTS POWERSHELL] 28 de febrero de 2012

PERMITIR LA EJECUCUON DE SCRIPTS


Y lo abriremos para habilitar la opcin de ejecucin de scripts ya que por defecto viene desactivada: El sistema operativo para protegernos de la ejecucin de cdigo malicioso impedir en primera instancia la ejecucin de cualquier script. Para verificar como est configurado el sistema operativo en lo que se refiere a la directiva de ejecucin de script, escribir este comando: Get-ExecutionPolicy Pero si realmente necesitamos ejecutar el script porque nosotros somos los creadores, podemos permitir temporalmente permitir la ejecucin con el comando (habiendo iniciado powershell como administrador) Este comando permitir los script en la maquina local: Set-ExecutionPolicy RemoteSigned [S] S [N] No [U] Suspender [?] Ayuda (el valor predeterminado es "S"): s

Si queremos permitir la ejecucin de todos aunque no estn en local: Set-ExecutionPolicy Unrestricted [S] S [N] No [U] Suspender [?] Ayuda (el valor predeterminado es "S"): s Y si finalmente queremos dejar como estaba en un principio (o para no permitir la ejecucin de nada que este firmado) Set-ExecutionPolicy AllSigned [S] S [N] No [U] Suspender [?] Ayuda (el valor predeterminado es "S"): s Si estamos interesados en conocer como firmar nuestros scripts consultar: Get-Help About_Signing

En mi caso como podemos ver he declarado la poltica menos restrictiva, y aqu hago la comprobacin, de que esta ha tenido efecto.

SEGUNDO DE ASIR

Pgina 4

[SCRIPTS POWERSHELL] 28 de febrero de 2012

FORMAS DE EJECUTAR LOS SCRIPTS


Para probar esto, creamos un script lo ms sencillo posible, como el que vemos en la siguiente imagen.

PRIMERA FORMA Pues ciertamente vamos a decir que hay dos formas, una de ellas la que la mayora de la gente utiliza, que es ejecutar powershell, situarnos en la ruta donde tenemos el script, en nuestro caso el escritorio y ejecutarlo poniendo ./nombredelarchivo

SEGUNDA FORMA Yo personalmente, prefiero esta segunda forma, perderemos como mucho cinco minutos en hacerlo pero despus con un simple doble clic podremos ejecutarlos

SEGUNDO DE ASIR

Pgina 5

[SCRIPTS POWERSHELL] 28 de febrero de 2012


Vemos el tipo de archivo y dems y le daremos donde pone se abre con: a cambiar

Nos vamos a la ruta de powershell la cual indico a continuacin y lo seleccionamos C:\Windows\System32\WindowsPowerShell\v1.0

Dejaremos como programa predeterminado el bloc de notas, pero en programas recomendados se encontrara powershell, y este era nuestro objetivo.

SEGUNDO DE ASIR

Pgina 6

[SCRIPTS POWERSHELL] 28 de febrero de 2012


Porque una vez este en programas recomendados con pulsar el botn derecho en la seccin abrir con, podremos ejecutarlos perfectamente.

Y como vemos as es:

SEGUNDO DE ASIR

Pgina 7

[SCRIPTS POWERSHELL] 28 de febrero de 2012

SCRIPTS PARA LA ADMINISTRACION DE ACTIVE DIRECTORY


BUSCAR USUARIOS
echo "************************" echo "##J##A##V##I##--ASIR2012" echo "************************" echo "Para ver los usuarios de una unidad organizativa, sigue las instrucciones:" $dom= read-host "Solo el nombre del dominio" $term= read-host "terminacion del dominio" do{ $UO= read-host "En que unidad organizativa deseas buscar" #$UO=$args[0] $filtro_busqueda = "(&(objectCategory=User))" $buscardom ="LDAP://OU=$UO,DC=$dom,DC=$term" $objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = $buscardom $objSearcher.Filter = $filtro $Resultados = $objSearcher.FindAll() write-host "Los usuarios de"$UO "son:" foreach ($objeto_Resultado in $Resultados) { $objeto = $objeto_Resultado.Properties; $objeto.name } $response = read-host "deseas buscar en otra unidad?S/N" } while ($response -eq "S")

SEGUNDO DE ASIR

Pgina 8

[SCRIPTS POWERSHELL] 28 de febrero de 2012

COMPROBACION

SEGUNDO DE ASIR

Pgina 9

[SCRIPTS POWERSHELL] 28 de febrero de 2012

CREAR UNIDADES ORGANIZATIVAS


echo "************************" echo "##J##A##V##I##--ASIR2012" echo "************************" echo "Para crear unidades organizativas, sigue las instrucciones:" $objDominio = read-host "Solo el nombre del dominio" $objDominio2 = read-host "terminacion del dominio" do{ $nueva_ou = read-host "Nombre de la Unidad organizativa" #$nueva_ou=$args[0] #$num=$args[1] $objDominio3=[ADSI]"LDAP://DC=$objDominio,DC=$objDominio2" $objOU=$objDominio3.Create("OrganizationalUnit","ou=$nueva_ou") $objOU.Put("description","Nueva OU creada para $nueva_ou") $objOU.SetInfo() echo "unidad organizativa creada" $response = read-host "deseas crear otra unidad organizativa?S/N" } while ($response -eq "S")

COMPROBACION

SEGUNDO DE ASIR

Pgina 10

[SCRIPTS POWERSHELL] 28 de febrero de 2012

CREAR UNIDADES ORGANIZATIVAS Y USUARIOS


echo "************************" echo "##J##A##V##I##--ASIR2012" echo "************************" echo "Para crear unidades organizativas y usuarios dentro de ellas, sigue las instrucciones:" $objDominio = read-host "Solo el nombre del dominio" $objDominio2 = read-host "terminacion del dominio" do{ $nueva_ou = read-host "Nombre de la Unidad organizativa" $num = read-host "Numero de usuarios" #$nueva_ou=$args[0] #$num=$args[1] $objDominio3=[ADSI]"LDAP://DC=$objDominio,DC=$objDominio2" $objOU=$objDominio3.Create("OrganizationalUnit","ou=$nueva_ou") $objOU.Put("description","Nueva OU creada para $nueva_ou") $objOU.SetInfo() #Bucle for para la insercion de usuarios for ($a = 1; $a -le $num; $a++) { $objOU=[ADSI]"LDAP://OU=$nueva_ou,DC=$objDominio,DC=$objDominio2" $objUser=$objOU.Create("user","CN=user$nueva_ou$a") $objUser.SetInfo() dsmod user "CN=user$nueva_ou$a, OU=$nueva_ou,DC=$objDominio,DC=$objDominio2" -disabled no }

$response = read-host "deseas crear otra unidad organizativa?S/N" } while ($response -eq "S")

SEGUNDO DE ASIR

Pgina 11

[SCRIPTS POWERSHELL] 28 de febrero de 2012

COMPROBACION

SEGUNDO DE ASIR

Pgina 12

[SCRIPTS POWERSHELL] 28 de febrero de 2012

BORRAR UNIDADES ORGANIZATIVAS Y USUARIOS DE LAS MISMAS


echo "************************" echo "##J##A##V##I##--ASIR2012" echo "************************" echo "Para borrar unidades organizativas y usuarios dentro de ellas, sigue las instrucciones:" $objDominio = read-host "Solo el nombre del dominio" $objDominio2 = read-host "terminacion del dominio" $unidad_org = read-host "Unidad organizativa que deseas borrar" while ($unidad_org -ne "*") { $Dom = "LDAP://OU=$unidad_org,DC=$objDominio,DC=$objDominio2" $Root = New-Object DirectoryServices.DirectoryEntry $Dom # Crea un "selector" que busca los objetos dentro de una OU $selector = New-Object DirectoryServices.DirectorySearcher $selector.SearchRoot = $root $erroractionpreference = "SilentlyContinue" if ($Selector.FindAll() -ne $null) { $Selector.Count #De este modo veriamos los usuarios de nuestra ou write-host "Hay todos estos usuarios" $Selector.FindAll() $adobj= $Selector.findall() |` where {$_.properties.objectcategory -match "CN=Person"} #Asi contamos el numero de usuarios que hay en nuestra OU $n=$adobj.count write-host "El numero de usuarios a borrar es de:"$n $puls = read-host "Estas seguro de querer borrar todos estos usuarios?s/n" if ($puls -ne "no") { $o = $Selector.findall() foreach ($usu in $o) { $u=$usu.Properties.cn $username="LDAP://CN=$u,OU=$unidad_org,DC=$objDominio,DC=$objDominio2" write-host "Usuario"$u #Usuarios borrados $user = [ADSI] "$username" write-host $username $user.psbase.DeleteTree() } SEGUNDO DE ASIR Pgina 13

[SCRIPTS POWERSHELL] 28 de febrero de 2012


} else { break } #Borramos tambin la OU que hemos seleccionado $dominio = [ADSI]"LDAP://DC=$objDominio,DC=$objDominio2" $delou = $dominio.Delete("OrganizationalUnit","ou=$unidad_org") } #Preguntamos de nuevo por la Unidad Organizativa $unidad_org = read-host "unidad organizativa que deseas borrar" }

SEGUNDO DE ASIR

Pgina 14

[SCRIPTS POWERSHELL] 28 de febrero de 2012

COMPROBACION

SEGUNDO DE ASIR

Pgina 15

[SCRIPTS POWERSHELL] 28 de febrero de 2012

EDITAR ATRIBUTOS DE LOS USUARIOS DE UNA UNIDAD ORGANIZATIVA


echo "************************" echo "##J##A##V##I##--ASIR2012" echo "************************" $objDominio = read-host "Solo el nombre del dominio" $objDominio2 = read-host "terminacion del dominio" do{ $UO = read-host "los usuarios de que unidad organizativa, deseas modificar el atributo" $Dom = "LDAP://OU=$UO,DC=$objDominio,DC=$objDominio2" $Root = New-Object DirectoryServices.DirectoryEntry $Dom $puntero = New-Object DirectoryServices.DirectorySearcher $puntero.SearchRoot = $root $erroractionpreference = "SilentlyContinue" if ($puntero.FindAll() -ne $null) { $puntero.Count #De este modo veriamos los usuarios de nuestra ou write-host "Hay todos estos usuarios" $puntero.FindAll() $adobj= $puntero.findall() |` where {$_.properties.objectcategory -match "CN=Person"} $n=$adobj.count write-host "Hay estos usuarios:""$n" $at = read-host "Atributo que deseas cambiar" $info = read-host "Nuevo valor para el atributo especificado"$at $o = $puntero.findall() foreach ($usu in $o) { #Usuarios modificados write-host ","$usu.Properties.cn $path=$usu.Properties.adspath $usuario=[ADSI]"$path" $usuario.Put("$at", $info) $usuario.SetInfo() } echo "atributo modificado perfectamente" } $response = read-host "deseas editar otro atibuto?S/N" } while ($response -eq "S")

SEGUNDO DE ASIR

Pgina 16

[SCRIPTS POWERSHELL] 28 de febrero de 2012

COMPROBACION

SEGUNDO DE ASIR

Pgina 17

[SCRIPTS POWERSHELL] 28 de febrero de 2012

SCRIPTS SOBRE EL SISTEMA


PARAR SERVICIOS
echo "************************" echo "##J##A##V##I##--ASIR2012" echo "************************" do{ $var = read-host "Quieres ver servicios activos o parados " $run="activos" $stop="parados" if ($var -eq $run) { get-service | where-object {$_.Status -eq "Running"} $parar = read-host "Quieres parar algun servicio (s/n)?" if ($parar -eq "s") { $ser = read-host "nombre del servicio que quieres parar" Stop-service -name $ser }else { exit } } elseif ($var -eq $stop) { get-service | where-object {$_.Status -eq "Stopped"} } else { write-host "Solo procesos activos o parados" } $response = read-host "deseas realizar otra operacion?S/N" } while ($response -eq "S")

SEGUNDO DE ASIR

Pgina 18

[SCRIPTS POWERSHELL] 28 de febrero de 2012

COMPROBACION

SEGUNDO DE ASIR

Pgina 19

[SCRIPTS POWERSHELL] 28 de febrero de 2012

INICIAR SERVICIOS
echo "************************" echo "##J##A##V##I##--ASIR2012" echo "************************" do{ $var = read-host "Quieres ver servicios activos o parados " $run="activos" $stop="parados" if ($var -eq $stop) { get-service | where-object {$_.Status -eq "Stopped"} $iniciar = read-host "Quieres iniciar algun servicio (s/n)?" if ($iniciar -eq "s") { $ser = read-host "nombre del servicio que quieres iniciar" Start-service -name $ser }else { exit } } elseif ($var -eq $run) { get-service | where-object {$_.Status -eq "Running"} } else { write-host "Solo procesos activos o parados" } $response = read-host "deseas realizar otra operacion?S/N" } while ($response -eq "S")

SEGUNDO DE ASIR

Pgina 20

[SCRIPTS POWERSHELL] 28 de febrero de 2012

COMPROBACION

SEGUNDO DE ASIR

Pgina 21

[SCRIPTS POWERSHELL] 28 de febrero de 2012

MATAR PROCESOS
echo "************************" echo "##J##A##V##I##--ASIR2012" echo "************************" do{ write-host "Los procesos del sistema son:" write-host Get-process $res = read-host "Quieres finalizar algun proceso (s/n)" if ($res -eq "s") { $term = read-host "que proceso es:" Get-Process | Where-Object { $_.name eq $term } | Foreach-Object { $_.Kill() } echo "proceso finalizado correctamente" } else { exit } $response = read-host "deseas finalizar otro proceso?S/N" } while ($response -eq "S")

SEGUNDO DE ASIR

Pgina 22

[SCRIPTS POWERSHELL] 28 de febrero de 2012

COMPROBACION

SEGUNDO DE ASIR

Pgina 23