Como Administradores de Servidores en nuestras labores diarias siempre tenemos la necesidad
de realizar tareas repetitivas que podemos ejecutar de manera más fácil automatizándolas a
través de Powershell. Actualmente Powershell se encuentra en la versión 3.0.
Como para hacerse una idea de la potencia de esta versión en Windows Server 2012 existen más
de 2300 “Cmdlets” -que son los comandos que se ejecutan en el ambiente de Powershell- ello
nos da una idea muy buena de todas las posibilidades que existen. En Windows 2008 existen 230
Cmdlets, como lo pueden ver ahora hay 10 veces más en la verisón Server 2012.
Tanto en Windows Server 2012 como en Windows 8 se agregó una funcionalidad
denominada Powershell ISE (Intellisense) que nos ayuda a autocompletar los comandos de una
manera inteligente. En Windows 8 Powershell ISE no viene en el menú inicio pero sí existe.
Pero bien, vamos a ejecutar una serie de comandos básicos de Powershell para empezar. Para
invocar a Powershell basta con escribir powe en el menú inicio de Windows Server 2012 o
Windows 8.
Si usted usa scripts para automatizar tareas de Windows aprender Powershell será de gran utilidad.
Como obtener la ayuda de un comando (ejemplo dir)
Existen tres maneras
PS C:\>get-help dir
PS C:\>man dir
PS C:\>help dir
Para obtener una lista de todos los comandos powershell
PS C:\>get-help *
Mostrar los drives del sistema
Get-PSDrive.
Este comando permite mostrar todos los drives. En esta sección la novedad es que
podemos navegar en el registro de Windows.
1
DISCO
Para saber las características del disco físico podemos usar el comando Get-Disk
Si se inicio Powershell como un usuario no privilegiado obtuvimos este error dado que ciertos
comandos y funciones no los podemos ejecutar con usuarios no privilegiados, como lo es el caso
de Get-Disk
Por lo tanto debemos ejecutar Powershell como administrador. Hay que abrir nuevamente
PowerShell pero esta vez hacemos clic derecho y seleccionamos Run as administrator
CPU
Para ver la información básica es posible usar el comando
Get-WmiObject Win32_Processor
gwmi win32_Processor
RED
Para ver todos los adaptadores de una máquina se usa Get-NetAdapter
Se desea ver muchos más detalles puedo usar Get-NetAdapterAdvancedProperty|more
Ver qué protocolos (TCP/IP v4, TCP/IP v6, etc) están habilitados en todos los adaptadores uso:
Get-NetAdapterBinding|more
Obviamente se puede ver características de un solo adaptador especificando el nombre del
mismo.
EJEMPLOS (Usando el adaptador denominado Wi-Fi):
Get-NetAdapter Wi-Fi
Get-NetAdapterAdvancedProperty Wi-Fi
Get-NetAdapterBinding Wi-Fi
REGISTROS
Para navegar en el registro se pone:
PS C:\> cd hklm:
2
Para regresar al drive c y dejar de navegar en el registro:
PS C:\> c:
Para limpiar la pantalla en powershell
PS C:\> cls
Para ver ir al registro hkey local machine
PS C:\> cd hklm:
Para ir al registro software\clients\Calendar\Microsoft Outlook\protocols
PS HKLM:\> cd software\clients\Calendar\Microsoft*\Protocols
Para volver al disco c
PS HKLM:\> c:
PROCESOS
Para mostrar una lista de procesos:
PS C:\> Get-Process
Para detener un proceso:
PS C:\> Stop-Process -processname [process]
Para listar servicios:
>Servicios
PS C:\>Get-service
Para iniciar un servicio:
PS C:\>start-service [service_name]
Para detener un servicio:
PS C:\>stop-service [service_name]
EJECUCION DE SCRIPTS
Para ejecutar y habilitar un script en powershell
Primero cree un archivo que se llame prueba.ps1 con el siguiente contenido:
/*Este programa muestra el mensaje hola mundo*/
Echo “hola mundo”
Por defecto le va a salir un mensaje de error cuando trate de ejecutarlo:
PS C:\> ./prueba.ps1
3
Para habilitar la ejecución de scripts y que no salga un mensaje de error:
PS C:\> set-executionpolicy unrestricted
Una vez habilitado, la ejecución en powershell funciona:
PS C:\> ./prueba.ps1
Para ejecutar un archivo de powershell ps1 con doble click.
Los archivos de powershell (Ps1) no funcionan con doble click así que hay que invocarlo
desde el cmd.
Esto por razones de seguridad .
Script y comandos DOS
Paso 1.
Tener un archivo con extensión ps1. Mi archivo se va a llamar creardir.ps1. Este ejemplo
crea un directorio que se llama Scripts.
Archivo: creardir.ps1
Contenido: mkdir Scripts
Paso 2. Crear un archivo con extensión cmd que llame al archivo creardir.ps1.
Archivo: [Link]
Contenido: [Link] -command .\creardir.ps1
Lo único que queda es hacer doble click en el cmd.
Para crear un evento en el visor de eventos:
PS C:\Documents and Settings\user> EVENTCREATE /T ERROR /ID 1000 /L APPLICATION /D
"Test Error"
Este mensaje le permitirá generar un evento de error con ID 100 en la categoría de
aplicaciones.
Para ver los eventos del visor de eventos en powershell:
PS C:\Documents and Settings\user> Get-EventLog -logName "Application"
4
MEMORIA
Aquí hay que apelar a un par de comandos que pueden crearse en un archivo .ps1 o ejecutarlos
directamente en Powershell:
$mem = Get-WmiObject -Class Win32_ComputerSystem
“Este sistema tiene {0} MB de Memoria” -f $($[Link]/1mb)
Como crear usuarios nuevos en Powershell
Como crear usuarios locales en powershell ?
$user = $[Link]("User", "Norberto")
$[Link]("P@ssword")
$[Link]()
$[Link] = [String] "test"
$[Link]()
Línea por línea:
$user = $[Link]("User", "Norberto")
Crea un usuario llamado Norberto
$[Link]("P@ssword")
Crea un password denominado queques
$[Link]()
Guarda la información.
$[Link] = [String] "test"
Establece la descripción del usuario.
Como ver que el usuario local se creó en powershell ?
Una vez creado el usuario puede correr el comando:
5
Net user
Si usted corre el ejemplo anterior debería listar a un usuario denominado Norberto.
La forma visual es mediante Mi PC >Administrar>usuarios locales
Como crear usuarios de Active directory en powershell ?
Ejemplo cómo crear usuarios en Active Directory.
Requisitos: Una máquina controladora de dominio que ya tiene Active Directory instalado.
Ejemplo:
# En la primera línea se conecta al dominio. Esta línea requiere ser modificada.
$Path= "LDAP://CN=Users,DC=Dominio,DC=com"
$name = "Usuario Powershell"
$NTname = "UsuarioP"
$ou = New-Object [Link]($Path)
$user = $[Link]("CN=" + $name,'user')
$[Link]()
$[Link] = $NTname
$[Link] = "QE Lead"
$[Link]()
"Usuario creado: "
$[Link]("P@ssword")
"Password establecido"
Viendo línea por línea:
$Path= ldap://CN=users,DC=Dominio,DC=com/
En esta línea está conectando al [Link]. Luego estoy entrando al contenedor users.
Para ver como se llama su dominio, entre a Usuarios y Equipos de Active Directory y vea en que
dominio desea crear.
6
Si se deseara crear usuarios en una unidad organizacional llamada “Nueva” se tendría que hacer lo
siguiente:
$Path= "LDAP://OU=nueva,DC=Dominio,DC=com"
Vamos a la siguiente línea:
$name = "Usuario Shell"
Estamos definiendo como se llamará el usuario.
$ou = New-Object [Link]($Path)
En esta línea se crea nuevo objeto (en este caso un usuario con el path establecido en la primera
línea.
$user = $[Link]("CN=" + $name,'user')
Estamos definiendo el nombre del usuario.
$[Link]()
Guarda los cambios
$[Link] = $NTname
Establece el tipo de cuenta.
$[Link] = "QE Lead"
Establece una descripción del usuario.
$[Link]("P@ssword")
Establece un password para usuario.
Si todo salió bien, usted debería poder ver a su usuario creado:
7
Como crear una unidad organizacional con powershell?
$Path2= [ADSI]"LDAP://DC=Dominio,DC=com"
$UO2=$[Link]("OrganizationalUnit", "ou=" + "nuevaUO")
$[Link]()
Veamos línea por línea:
La primera línea se conecta con el dominio de active directory.
La segunda línea crea una unidad organizacional llamada nuevaUO.
La última línea graba la información.
8
Si todo sale bien debería ver esto en su AD:
Como crear una unidad organizacional dentro de otra unidad organizacional con powershell
(unidad organizacional hija) ?
Se creara una unidad organizacional llamada hijanueva dentro de la unidad
organizacionalnuevaUO (creada en el ejercicio anterior):
$Path3= [ADSI]LDAP://OU=nuevaUO,DC=Dominio,DC=com
$UO3=$[Link]("OrganizationalUnit", "ou=hijanueva")
$[Link]()
Si todo salió bien debería ver lo siguiente:
9
10