Es el sustituto de la antigua consola CMD y está basado en objetos por lo que en lugar de procesar texto como la mayoría de intérpretes de comandos procesa objetos. A sus comandos se les llama cmdlets y están formados por un verbo (Get, Set, Remove, …) y un nombre de objeto sobre el que realizar la acción (Location, Item, Content, Process, Service, …) separados por un -.
Por ejemplo, para cambiar al directorio Windows el comando es cd C:\Windows
y su cmdlet correspondiente es
Set-Location C:\Windows
donde:
Y para saber en qué directorio estamos deberíamos ejecutar Get-Location
.
La salida de un cmdlet es también un objeto por lo que podemos encadenar varios cmdlets, formatear la salida, aplicar filtros, …
Algunos comandos útiles para todo esto son:
Out-GridView
: formatea la salida en forma de tabla en el entorno gráfico con la que podemos interactuar. Reconoce los nombres de los campos así como su tipo de datosWhere-Object
: es un poderoso filtro que no da acceso a multitud de funcionesSort-Object
: permite ordenar por la propiedad que deseemosExport-CSV
: exporta la salida a formato CSV (texto con separador)Measure-Object
: cuenta los objetos pasadosEjemplo:
Get-Process | Where-Object {$_.Id -gt 500 -and $_.Id -lt 1000 } | Sort-Object -Property Id | Format-Table -Property *
El operador |
permite encadenar varios comandos de forma que la salida del comando que hay antes del operador constituirá la entrada para el comando que hay tras él. Se utiliza tanto en PS como en la consola clásica y en las diferentes terminales de GNU/Linux. Lo veremos con más detalle en el apartado de redireccionamiento de comandos.
Los cmdlets normalmente tienen alias tanto para poder seguir usando los comandos clásicos como para no escribir tanto. Por ejemplo Get-ChildItem
tiene como alias dir
, ls
y gci
. Podemos ver todos los alias de un comando con Get-Alias
. Ejemplo:
Get-Alias -Definition Get-ChildItem
Normalmente para ejecutar un comando ponemos uno o más parámetros para que el comando haga exactamente lo que queremos. Esto hace que en ocasiones sea compleja la forma de utilizar un comando y muchas veces tenemos que ir a la ayuda para hacer lo que queremos.
Para obtener la ayuda de un comando ejecutaremos el cmdlet
Get-Help <NombreDelCmdlet>
Si ponemos Get-Help <NombreDelCmdlet> -full
muestra información detallada de cada opción del comando así como ejemplos de uso.
Si sólo queremos ver ejemplos de su uso pondremos Get-Help <NombreDelCmdlet> -examples
.
La primera vez nos pedirá que actualicemos la ayuda con el cmdlet Update-Help
ya que no se instala por defecto (hay que hacerlo desde una consola de Administrador). Este cmdlet tiene como alias help y man.
El cmdlet para obtener la lista de comandos es Get-Command
.
PowerShell incluye un entorno para probar comandos llamado ISE (Interactive Script Environment) que nos permite ver gráficamente los parámetros de un comando lo que puede ser útil cuando no los recordamos.
En este caso se quería listar los ficheros del directorio actual cuyo nombre empieza por ‘ntuser’ aunque estén ocultos. Se selecciona el comando a usar, se marcan los parámetros en el panel de la derecha y se pulsa ‘Ejecutar’ y el entorno escribe por nosotros el comando con sus parámetros correctos.
Normalmente para ejecutar un comando ponemos uno o más parámetros para que el comando haga exactamente lo que queremos. Esto hace que en ocasiones sea compleja la forma de utilizar un comando y muchas veces tenemos que ir a la ayuda para hacer lo que queremos.
La información que nos proporciona la ayuda es la siguiente:
< >
significa que no hay que poner eso sino un valor que concuerde con lo que pone allí. Por ejemplo <System.String>
indica que hay que poner una cadena (en este caso la que indica los ficheros a copiar y es obligatorio ponerla. Si no lo hacemos tendremos un error al intentar ejecutar el comando-Confirm
(los corchetes no se escriben) y en ese caso si ya existe el fichero en el destino nos pedirá confirmación para sobreescribirlo. Si no lo ponemos no lo verificaráGet-Help
para:
-examples
: muestra ejemplos del comando-detailed
: muestra más información del comando-online
: muestra la ayuda de internet del comandoCómo podemos ver, los parámetros que modifican el comportamiento de un comando en la consola de Windows son una letra precedida del carácter -. Podemos poner tantos parámetros como necesitemos para un comando.
Set-Location
(equivale a cd
)
Cambia el directorio actual por el que le pasamos como parámetro. El cmdlet para mostrar el directorio actual es Get-Location
.
Ejemplos:
Set-Location -Path C:\Usuarios
: Cambia al directorio C:\Usuarios que pasa a ser el directorio actual. En este cmdlet y en muchos otros podemos omitir el parámetro -Path y poner directamente la ruta: Set-Location C:\Usuarios
Set-Location -Path ..
: Cambia al directorio padre del actualGet-Location
: Muestra la ruta absoluta del directorio actualSet-Location -Path .. -Passthru
: Cambia al directorio padre del actual y muestra por consola dónde se encuentra (es como hacer tras el Set-Location un Get-Location)Get-ChildItem
(equivale a dir
)
Lista el contenido del directorio pasado como parámetro. Si no le pasamos ningún parámetro muestra el contenido del directorio actual.
Principales parámetros:
-Path <PATH>
: de qué directorio queremos ver su contenido (podemos omitir el -Path)-Recurse
: muestra también el contenido de los subdirectorios-Force
: muestra también los archivos ocultos y del sistema (los que tienen los atributos H -hidden- o S -system-)-Filter
, -Include
, -Exclude
: permite filtrar los resultados por el nombre. También se puede usar para filtrar el cmdlet Where-Object
que es mucho más potente y el cmdlet Sort-Object
para ordenar el resultadoEjemplos:
Get-ChildItem
: Muestra el contenido del directorio actualGet-ChildItem ..
: Muestra el contenido del directorio padre del actualGet-ChildItem C:\Usuarios -Force
: Muestra el contenido del directorio C:\Usuarios, incluyendo ficheros ocultos y del sistemaGet-ChildItem -Include *.txt
: Muestra todos los ficheros del directorio actual con extensión .txtGet-ChildItem -Include *.txt | Where-Object -FilterScript {($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)}
: Muestra todos los ficheros del directorio actual con extensión .txt que se modificaron por última vez después del 1 de octubre de 2005, cuyo tamaño no es inferior a 1 megabyte ni superior a 10 megabytesGet-ChildItem -Include *.txt | Where-Object -FilterScript {($_.LastWriteTime -gt '2015-10-01') -and ($_.Length -ge 500kb) -and ($_.Length -le 10mb)} | Sort-Object -Property Length
: Muestra todos los ficheros del directorio actual con extensión .txt que se modificaron por última vez después del 1 de octubre de 2015, cuyo tamaño es mayor o igual a 500 kilobytes y menor o igual a 10 megabytes ordenados por tamañoNew-Item
(en directorios equivale a mkdir
)
Crea un nuevo directorio o fichero que le pasamos como parámetro. Ejemplos:
New-Item -Path 'clientes' -ItemType Directory
: Crea un directorio llamado clientes dentro del directorio actualNew-Item -Path '..\clientes' -ItemType Directory
: Crea un directorio llamado clientes en el directorio padre del actualNew-Item -Path 'C:\Usuarios\Juan\Documentos\clientes' -ItemType Directory
: Crea el directorio clientes en C:\Usuarios\Juan\DocumentosNew-Item -Path 'clientes.txt' -ItemType File
: Crea un fichero llamado clientes.txt dentro del directorio actualNew-Item -Path 'C:\Usuarios\Juan\Documentos\clientes.txt' -ItemType File
: Crea el fichero clientes.txt en C:\Usuarios\Juan\DocumentosRemove-Item
(equivale a rmdir
en directorios y del
en ficheros)
Borra los directorios o ficheros pasados como parámetro. Si queremos borrar un directorio que no está vacío Remove-Item pedirá confirmación (a menos que se le añada el modificador -Recurse).
Ejemplos:
Remove-Item -Path clientes
: Elimina el directorio clientes que hay dentro del directorio actual (si no está vacío pedirá confirmación)Remove-Item -Path C:\Usuarios\Juan\Documentos\clientes
: Elimina el directorio clientes de la ubicación indicada (si no está vacío pedirá confirmación)Remove-Item -Path clientes -Recurse
: Elimina el directorio clientes que hay dentro del directorio actual y todo su contenido sin pedir confirmaciónRemove-Item -Path lligme.txt
: Borra el fichero lligme.txt del directorio actualRemove-Item -Path C:\Usuarios\juan\*.odt
: Borra todos los ficheros con extensión odt del directorio indicadoCopy-Item
(equivale a copy/xcopy
)
Copia los ficheros o directorios indicados a una nueva ubicación. Si ya existe el fichero en el destino se produce un error. Principales parámetros y modificadores:
Ejemplos:
Copy-Item -Path leeme.txt -Destination F:\
: Copia todos el fichero leeme.txt del directorio actual al directorio raíz de la unidad F:. También se puede poner Copy-Item leeme.txt F:\
Copy-Item -Path * -Destination F:\
: Copia todos los ficheros del directorio actual al directorio raíz de la unidad F: (pero no copiará los subdirectorios)Copy-Item -Path * -Destination F:\ -Recurse
: Copia todos los ficheros y subdirectorios del directorio actual al directorio raíz de la unidad F:Move-Item
(equivale a move
)
Funciona como el comando de copiar pero en vez de hacer una copia se mueven los ficheros o directorios de ubicación. Después copiar tendremos el fichero 2 veces: donde estaba y donde lo hemos copiado. Si lo movemos se borra de donde estaba y se sitúa donde lo copiamos.
Funciona también con directorios sn necesidad de poner modificador (sin -Recurse).
Rename-Item
(equivale a rename
)
Permite cambiar el nombre del fichero o directorio pasado como primer parámetro por el que le pasamos como segundo parámetro. Ejemplo:
Rename-Item -Path C:\Windows\leeme.txt -NewName readme.txt
: Cambia el nombre del fichero leeme.txt del directorio C:\Windows por readme.txtTambién podemos cambiar el nombre a muchos ficheros a la vez:
Get-ChildItem *.txt | Rename-Item -NewName { $_.Name -replace '.txt','.log' }
: Cambia la extensión de todos los ficheros .txt del directorio actual por .logNo se puede cambiar el directorio donde se encuentra el fichero con este comando. Para ello hay que usar Move-Item que permite moverlo de lugar y además cambiar su nombre (si se lo especificamos en la ruta de destino)
New-SMBShare
Permite compartir en la red un directorio existente con el protocolo SMB/CIFS. Ejemplo:
New-SMBShare –Name Datos –Path "C:\Datos" –FullAccess "Admins. del dominio" -ReadAccess "Usuarios"
: comparte el directorio C:\Datos con el nombre Datos y le asigna permisos SMB de Control total al grupo Admins. del dominio y permisos de Leer al grupo Usuarios.
System.Net.WebClient.DownloadFile
El objeto System.Net.WebClient proporciona métodos comunes para enviar y recibir datos de un recurso identificado por un identificador URI. La forma de hacerlo es:
$webClient = New-Object System.Net.WebClient
$webClient.DownloadFile("http://www.xyz.com/path/file.txt","C:\path\file.txt")
Si se necesita autenticación en el servidor web, antes de descargar el fichero ejecutaremos $webClient.Credentials = Get-Credential
para que nos pidan las credenciales.
Existen muchas formas en Powershell de mostrar, filtrar y ordenar el contenido de un fichero. La más sencilla es usar el cmdlet Get-Content
para mostrarlo y luego usar Where-Object
, Sort-Object
, etc. para filtrarlo, ordenarlo, etc ya que estos comandos (como todos) trabajan sobre objetos y funcionan tanto sobre ficheros como sobre las líneas de un fichero.
Ejemplo:
Get-Content fijo.txt | Where-Object {$_ -match "Muro"}
: Muestra las líneas del fichero fijo.txt que contengan el texto Muro. Fíjate que buscamos en toda la línea ($) y no en un campo concreto ($.Localitat) porque todo el contenido es texto, no hay definidos campos. Si queremos todas las líneas que NO contengan un texto en lugar de -match
usaremos -notmatch
.Get-Content fijo.txt | Where-Object {$_ -match "Muro"} | Sort-Object
: Muestra las líneas del fichero fijo.txt que contengan el texto Muro ordenadas alfabéticamenteSi se trata de un fichero de texto delimitado por un carácter (CSV) podemos convertirlo en un objeto con sus campos como propiedades con el comando Import-Csv
. Una vez convertido en objeto podemos filtrar por campo, ordenar por campo, mostrar sólo algunos campos y cualquier otra cosa que se nos ocurra.
Ejemplos:
Import-Csv delimitado.txt -Delimiter ";"
: Convierte el fichero CSV en un objeto y nos muestra cada item con sus propiedadesImport-Csv delimitado.txt -Delimiter ";" | Format-Table
: Convierte el fichero CSV en un objeto y nos muestra cada item con sus propiedades en formato tabla (por defecto aparece en formato lista Format-List
)Import-Csv delimitado.txt -Delimiter ";" | Out-GridView
: Convierte el fichero CSV en un objeto y lo muestra en una tabla grid en una ventanaImport-Csv delimitado.txt -Delimiter ";" | Where-Object {$_.Localitat -match "Muro"}
: Muestra las líneas del fichero fijo.txt que contengan el texto “Muro” en el campo “Localitat”. Fíjate que ahora sólo filtra por dicho campo por lo que si hay un alumno cuyo apellido sea “Muro” no aparecerá (en el ejemplo de texto fijo sí que aparecería)Import-Csv delimitado.txt -Delimiter ";" | Sort-Object -Property 1rCognom, 2nCognom
: Convierte el fichero CSV en un objeto y lo ordena por los campos 1rCognom y, los que lo tengan igual, 2nCognomImport-Csv delimitado.txt -Delimiter ";" | Where-Object {$_.Localitat -match "Muro"} | Select-Object 1rCognom, 2nCognom, Nom
: De las líneas del fichero fijo.txt que contengan el texto “Muro” en el campo “Localitat” muestra sólo los campos 1rCognom, 2nCognom y NomGet-NetAdapter
: Muestra los adaptadores de red y sus propiedades básicasGet-NetIpAddress
: Muestra la configuración de la dirección IP, tanto IPv4 como IPv6 y las interfaces de red respectivasGet-NetIPConfiguration
: Muestra información de la configuración de red, interfaces utilizables, direcciones IP y direcciones DNS del sistema.Get-NetRoute
: Muestra toda la tabla de enrutamientoEnable-NetAdapter -Name "Ethernet"
: Activa la interfaz llamada EthernetDisable-NetAdapter -Name "Ethernet"
: Desactiva la interfaz llamada EthernetRename-NetAdapter -Name "Ethernet" -NewName "Externa"
: Renombra un adaptador de redRemove-NetIPAddress -InterfaceAlias "Ethernet"
: Elimina la IP del adaptador “Ethernet”Remove-NetRoute -InterfaceAlias "Ethernet"
: Elimina la gateway y las rutas del adaptador “Ethernet”New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.25 -PrefixLength 24 -DefaultGateway 192.168.1.1
: Se asigna a la interfaz “Ethernet” la IP 192.168.1.25/24 y la puerta de enlace 192.168.1.1Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 10.0.0.2, 8.8.8.8
: Se asigna a la interfaz “Ethernet” los DNS 10.0.2.2 y 8.8.8.8Test-NetConnection -ComputerName 8.8.8.8
: Realiza un ping a 8.8.8.8Test-NetConnection 8.8.8.8 -TraceRoute
: Ejecuta un tracert a 8.8.8.8Resolve-DnsName google.com
: Ejecuta un Nslookup a google.comGet-NetTCPConnection
: Muestra el estado actual de la red, los puertos y su propietario (como netstat)Get-NetTCPConnection -State Established
: igual que la anterior pero muestra sólo las conexiones establecidasGet-Disk
: muestra los discos de ordenadorGet-Partition
: muestra las particionesGet-StoragePool
: muestra los pools de almacenamiento del servidorInitialize-Disk
: inicializa un nuevo disco añadido al equipo (luego habrá que hacer particiones y formatearlas). Ejemplo: Initialize-Disk -Number 1 -PartitionStyle GPT
New-Partition -DiskNumber 1 -Size 150GB -AssignDriveLetter
: crea una partición de 150GB en el disco 1 y hace que se le asigne una letra automáticamente (por ejemplo la E:)Get-Volume -DriveLetter E:
: Muestra información de la partición E: (si no está formateada el espacio disponible será 0)Format-Volume -DriveLetter E -FileSystem NTFS
: formatea la partición E: a NTFSOptimize-Volume -DriveLetter E -Defrag -Verbose
: inicia la desfragmentación del disco E: mostrando todos los detalles de la operaciónOptimize-Volume -DriveLetter E -ReTrim -Verbose
: optimiza un disco SSD que admite TRIMRemove-Particion -DriveLetter E
: Elimina la partición E:Para ver los procesos del sistema usamos el cmdlet Get-Process
. Ejemplos:
Get-Process
: Muestra todos los procesosGet-Process -Id 2398
: Muestra el proceso 2398Get-Process -Name firefox*
: Muestra todos los procesos cuyo nombre comience por firefoxSi queremos detener procesos el cmdlet que se usa es Stop-Process
. Ejemplos:
Stop-Process -Id 2398
: Mata el proceso 2398Stop-Process -Name firefox*
: Mata todos los procesos cuyo nombre comience por firefoxStop-Process -Name firefox* -Confirm
: Mata todos los procesos cuyo nombre comience por firefox pero antes pide confirmación para cada unoGet-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process
: Mata todos los procesos que no estén respondiendoPara iniciar un proceso se usa Start-Process
. Ejemplo:
Start-Process notepad.exe
: Inicia un bloc de notasTambién podemos gestionar los servicios de Windows con los comandos:
Get-Service
: Muestra todos los servicios. Si mostramos un servicio con el parámetro -RequiredServices
se muestran los servicios necesarios para que ese servicio funcione. Con el parámetro -DependentServices
se muestran los servicios que necesitan de ese servicio para funcionarStop-Service -Id 2398
: Para el proceso 2398Start-Service -Name wua*
: Muestra todos los procesos cuyo nombre comience por firefoxSet-Service
: Modifica cualquier cosa del servicioEjemplos:
Get-Service
**: Muestra todos los serviciosGet-Service -Name wuauserv
: Muestra información del servicio wuauserv (Windows Update)Get-Service -Name wuauserv -RequiredServices
: Muestra los servicios que necesita Windows Update para funcionarStop-Service -Id 2398
: Para el servicio 2398Stop-Service -Name wuauserv
: Para el servicio wauservStart-Service -Name wuauserv
: Arranca el servicio wuauservSet-Service wuauserv -StartupType Disabled
: Deshabilita el servicio wuauserv (no se podrá arrancar hasta que se configure como Manual o Automatic)Para trabajar con los usuarios tenemos comandos ...-Local...
para trabajar con usuarios locales y ...-AD...
para trabajar con usuarios de Active Directory. Si no nos aparecen los comandos de active Directory debemos instalar ese módulo para Powershell.
Los comandos más habituales son:
Get-LocalUser
/ Get-ADUser
: muestra las cuentas de usuarios locales de ese equipo / de Active DirectoryNew-LocalUser
/ New-ADUser
: Crea una nueva cuenta de usuario local / de ADSet-LocalUser
/ Set-ADUser
: Establece o modifica una propiedad de una cuenta de usuarioSet-ADAccountPassword
: Establece o modifica la contraseña de una cuenta de usuario de AD (si la cuenta es local podemos hacerlo con Set-LocalUser
)Rename-LocalUser
/ Rename-ADUser
: Renombra una cuenta de usuarioDisable-LocalUser
/ Disable-ADUser
: Desactiva una cuenta de usuarioEnable-LocalUser
/ Enable-ADUser
: Activa una cuenta de usuarioRemove-LocalUser
/ Remove-ADUser
: Elimina una cuenta de usuarioEl nombre de un usuario puede contener hasta 20 caracteres. La contraseña puede contener hasta 127 caracteres.
Ejemplos:
Get-ADUser
: muestra todos los usuarios de Active DirectoryGet-ADUser -Filter * -SearchBase "OU=1rCurs,OU=ASIX,DC=BATOI,DC=LAN"
: muestra los usuarios de la unidad organizativa (OU) ‘1rCurs’ que está dentro de la OU ‘ASIX’ del dominio Batoi.lanGet-ADUser -Identity jsegura -Properties *
: muestra todos los campos del usuario jseguraNew-LocalUser "User01" -Description "Cuenta de prueba" -NoPassword
: crea la cuenta de User01 con una descripción y sin contraseñaNew-ADUser "jsegura" -Path OU=1rCurs,OU=ASIX,DC=BATOI,DC=LAN -DisplayName "Juan Segura" -GivenName "Juan" -Surname "Segura" -AccountPassword (ConvertTo-SecureString 12345678 -AsPlainText -force) -OfficePhone "666 12 34 56" -Enabled $true
: crea el usuario jsegura en la OU ‘1rCurs’ que está dentro de la OU ‘ASIX’ del dominio Batoi.lan, le asigna la contraseña 12345678 (encriptada), le configura unos parámetros (nombre, teléfono, …) y la activa. Si queremos pedir al usuario que introduzca la contraseña haremos -AccountPassword(Read-Host -AsSecureString "Introduce la contraseña")
New-LocalUser "User01" -Description "Cuenta de prueba" -NoPassword
: crea la cuenta de User01 con una descripción y sin contraseñaSet-ADAccountPassword -Identity jsegura -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force)
: le pone al usuario jsegura la contraseña p@ssw0rdSet-ADAccountPassword -Identity 'CN=jsegura,OU=1rCurs,OU=ASIX,DC=BATOI,DC=LAN' -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force)
: hace lo mismo pero identifica al usuario por su DN en lugar de por su loginSet-ADUser -Identity jsegura -Remove @{otherMailbox="juan.segura"} -Add @{url="acme.com"} -Replace @{title="manager"} -Clear description
: modifica el usuario jsegura y le quita el campo de otherMailbox, le añade el de url y le cambia el de title, además de borrar su descripciónNOTA: para especificar el nombre de usuario se pone el parámetro -Name
o no se pone nada. Para especificar el nombre completo con New-LocalUser
el parámetro es -FullName
y en New-ADUser
es -DisplayName
y además permite indicar nombre y apellidos con -GivenName
y -SurName
respectivamente.
Un parámetro muy útil de New-ADUser
es -Instance
que permite copiar de otro usuario una serie de opciones configuradas en el mismo. Por ejemplo podemos crear una plantilla para cada tipo de usuario donde indiquemos cosas como oficina, departamento, horas de inicio de sesión, etc. Después, para crear un nuevo usuario basado en dicha plantilla haremos:
$plantilla1rAsix = Get-ADUser -Identity plantilla1rAsix -Properties Office,Department,LogonHours
New-ADUser "jsegura" -Path OU=1rCurs,OU=ASIX,DC=BATOI,DC=LAN -DisplayName "Juan Segura" -GivenName "Juan" -Surname "Segura" -AccountPassword (ConvertTo-SecureString 12345678 -AsPlainText -force) -OfficePhone "666 12 34 56" -ChangePasswordAtLogon $true -Enabled $true -Instance $plantilla1rAsix
El nuevo usuario jsegura obtendrá los campos Office, Department y LogonHours del usuario plantilla1rAsix.
Get-LocalGroup
/ Get-ADGroup
: muestra los grupos locales / de Active DirectoryNew-LocalGroup
/ New-ADGroup
: Crea un nuevo grupoSet-LocalGroup
/ Set-ADGroup
: Establece o modifica una propiedad de un grupoRename-LocalGroup
/ Rename-ADGroup
: Renombra un grupoRemove-LocalGroup
/ Remove-ADGroup
: Elimina un grupoGet-LocalGroupMember
/ Get-ADGroupMember
: Muestra los miembros de un grupoAdd-LocalGroupMember
/ Add-ADGroupMember
: Agrega un miembro a un grupoRemove-LocalGroupMember
/ Remove-ADGroupMember
: Elimina un miembro de un grupoEjemplos:
New-LocalGroup -Name "Profes" - Description "Professors del curs"
: añade un nuevo grupo local llamado ProfesNew-ADGroup -Name "Professors del matí" -SamAccountName ProfesMati -GroupCategory Security -GroupScope Global -DisplayName "Professors del matí" -Path "OU=1rCurs,OU=ASIX,DC=BATOI,DC=LAN" -Description "Members of this group are teachers in the morning courses"
: añade un nuevo grupo global llamado ProfesMati en la OU ‘1rCurs’ que está dentro de la OU ‘ASIX’ del dominio Batoi.lanAdd-ADGroupMember -Identity ProfesMati -Members jsegura,lmanzaneque
: añade los usuarios jsegura y lmanzaneque al grupo ProfesMatiGet-Member
: lista las propiedades que tenemos disponibles de un comando para consultar/mostrar/filtrar, etcGet-Date
: Obtiene la fechaClear-Host
: Limpia la terminalRead-Host
: Lee lo que se escribe en la terminal (normalmente para guardarlo en una variable)Rename-Computer -Name pc01
: renombra este ordenado a pc01Stop-Computer
: para la máquinaRestart-Computer
: reinicia la máquinaAdd-Computer ACME
: añade este ordenador al dominio ACME (es el nombre NetBIOS del dominio)Si no nos aparecen los comandos de PowerShell en la máquina debemos instalar ese módulo. En el controlador del dominio ya estará instalado por defecto pero no lo estará en otros servidores miembro ni en los clientes.
Para instalarlo en un Windows Server, si lo tenemos disponible basta con ejecutar:
Import-Module -Name ActiveDirectory
Si no está disponible podemos instalarlo con:
Install-WindowsFeature -Name “RSAT-AD-PowerShell” -IncludeAllSubFeature
Para instalarlo en el cliente podemos ejecutar:
Get-WindowsCapability -Name RSAT.ActiveDirectory* -Online | Add-WindowsCapability -Online
En Internet hay infinidad de páginas y tutoriales sobre Powershell.
En la web de Microsoft encontramos recursos para aprender Powershell.
Para aprender scripts hay multitud de enlaces como el libro Scripts en PowerShell: Guia para principiantes de SomeBooks.
También hay gran cantidad de cursos disponibles, como el de Automatización de tareas administrativas mediante PowerShell de Microsoft.