Comandos básicos en Powershell
Documento escrito por: Fernando Lucendo García
Puedes ver todos los documentos de este autor aquí.
Introducción
En este artículo se realizarán operaciones básicas de gestión y administración en la terminal de Powershell. Cabe destacar que para poder introducir todos estos comandos necesitaremos previamente una consola de Windows Powershell ISE, abierta en modo administrador.
Una vez tengamos nuestra terminal preparada, podemos comenzar.
help [comando] -online -- Mostrar información del comando que indiquemos de forma online.
Ejemplo:
help Set-Location -online
Alias en Powershell
GCI
- Permite ver el contenido de la carpeta actual. Get-ChildItem
es el comando que pertenece a este alias.
De esta forma podemos concluir que introduciendo la primera letra de cada palabra que forma el comando, sin guiones ni carácteres especiales por medio, podremos obtener su alias, de tal modo que para sacar el alias del comando Get-ChildItem
hemos utilizado la primera letra de cada palabra del comando, G de GET, C de CHILD e I de ITEM.
Parámetros
-path
Indicar el directorio del cuál se quiere obtener información.
-name
Indicar el nombre del objeto que se esté manejando.
-recurse
Añadiendo el parámetro para que se ejecute de forma recursiva.
Movernos entre directorios
Establecer una ubicación:
Set-Location ruta_directorio
Ejemplo:
Set-Location -Path C:\Users\Fernando\Desktop
Saber cuál es la ubicación actual:
Get-Location
Archivos y carpetas
Crear un archivo llamado tiempo.txt en el directorio actual:
New-Item -Name tiempo.txt -Path .\
Mostrar el contenido de un archivo:
Get-Content .\archivo.txt
Cambiar o establecer el contenido de algo por otro:
Set-Content -Path .\archivo.txt -Value "nuevo"
Añadir contenido a un fichero:
Add-Content -Path .\archivo.txt -Value "Añadido"
Eliminar un archivo:
Remove-Item -Path .\tiempo.txt
Crea un directorio nuevo llamado tiempo:
New-Item -Path .\ -Name tiempo -ItemType Directory
Establece la ubicación actual en el escritorio:
Set-Location -Path .\Desktop
Cambiar el nombre del directorio uno a dos:
Rename-Item -Path .\uno -NewName dos
Borra .\dos y todo su contenido de dentro:
Remove-Item -Path .\dos -Recurse
Crea un directorio nuevo llamado uno:
New-Item -Name uno -Path .\ -ItemType Directory
Crea un directorio nuevo llamado dos:
New-Item -Name uno -Path .\ -ItemType Directory
Copia uno dentro de dos:
Copy-Item -Path .\uno -Destination .\dos
Crea un directorio nuevo llamado todo:
New-Item -Name todo -Path .\ -ItemType Directory
Borrar el directorio uno con un alias (Remove-Item):
ri .\uno
Mueve la carpeta dos a todo:
Move-item -Path .\dos -Destination .\todo
Servicios
Ver todos los servicios:
Get-Service
Ver todos los procesos:
Get-Process
Ver todos los procesos que empiezan por w:
Get-Process -Name w*
Ver el proceso con el nombre winit
Get-Process -Name winit
Ver el contenido del proceso en formato lista:
Get-Process -Name winit | Format-List
Mostrar por pantalla
Muestra por pantalla el mensaje "Hola mundo":
Write-Host "Hola mundo"
Pide introducir algo por pantalla:
$nombre=Read-Host "Introduce tu nombre"
Muestra el contenido de la variable $nombre:
Write-Host $nombre
Guarda la fecha actual del sistema en $var:
$var = Get-Date
Muestra por pantalla el valor de $var:
Write-Output $var
Establece como contenido del fichero fecha.txt el valor de $var:
Set-Content -Path .\fecha.txt -value $var
Consulta el contenido de fecha.txt:
Get-Content -Path .\fecha.txt
Obtiene la fecha del sistema y entuba la salida de este comando para añadir el contenido a fecha.txt:
Get-Date | Add-Content .\fecha.txt
Usuarios
Muestra un listado de todos los usuarios del sistema, junto con una descripción y su estado:
Get-LocalUser
Muestra un listado detallado del usuario indicando su nombre:
Get-LocalUser -Name Fernando | format-list
Muestra un listado de todos los grupos del sistema:
Get-LocalGroup
Muestra listado detallado del usuario indicando su nombre:
Get-LocalGroup -Name Administradores | format-list
Crear un nuevo usuario con el nombre y descripción indicada y sin contraseña:
New-LocalUser -Name Maestre -Description "Gran centro" -NoPassword
Este comando asigna como variable una entrada de texto en modo seguro:
$psw = Read-Host -AsSecureString
Establece la contraseña guardada en la variable al usuario Maestre:
Set-LocalUser -Name Maestre -Password $psw
Cambia el nombre del usuario Maestre por el nombre ASIR:
Rename-LocalUser -Name Maestre -NewName Asir
Eliminar el usuario ASIR:
Remove-LocalUser -Name ASIR
Habilitar un usuario local especificado:
Enable-LocalUser -name ASO
Deshabilitar un usaurio local especificado:
Disable-LocalUser -name ASO
Crea un nuevo grupo local llamado maestre con la descripcion indicada:
New-LocalGroup -name Maestre -Description "Clase"
Añadir un nuevo miembro a un grupo:
Add-LocalGroupMember -Group Maestre -Member ASO
Ver el contenido del grupo maestre:
Get-LocalGroupMember -Group Maestre
NO SE PUEDE METER UN GRUPO DENTRO DE OTRO GRUPO
Carpetas compartidas
Crea un directorio nuevo llamado compartida en el escritorio:
New-Item -Path .\Desktop -Name compartida -ItemType Directory
Comparte esta carpeta creada dando todos los permisos al usuario Alfonso:
New-SmbShare -Name fernando -Path C:\Users\Fernando\Desktop\compartida -FullAccess "alfonso"
Consultar las carpetas compartidas de nuestro equipo:
Get-SmbShare
Ver quién tiene acceso a una carpeta compartida usando el nombre del recurso:
Get-SmbShareAccess -Name fernando | format-list
Compartir la misma carpeta usando un nombre de recurso distinto y de solo lectura:
New-SmbShare -Name lucendo -Path C:\Users\Fernando\Desktop\compartida -ReadAccess "Maestre"
Eliminar el recurso compartido con un nombre específico:
Remove-SmbShare -Name fernando
Cambiar la descripción de un recurso compartido:
Set-SmbShare -Description "una" -Name "lucendo"
Asignarle acceso con algún permiso a una cuenta de usuario:
Grant-SmbShareAccess -name lucendo -AccountName ASIR -AccessRight Change
Quitar los permisos concedidos sobre la cuenta de usuario ASIR al recurso lucendo:
Revoke-SmbShareAccess -name lucendo -AccountName ASIR
Este último parámetro limita a 2 los usuarios que se pueden conectar simultaneamente a la carpeta compartida:
New-SmbShare -Name rutilla -Path 'C:\Users\Fernando\Desktop\rutas' -ConcurrentUserLimit 2
Bloquear el acceso sobre el recurso rutilla al usuario Carrion de forma forzosa:
Block-SmbShareAccess -Name rutilla -AccountName carrion -Force
Desbloquea el acceso sobre el recurso rutilla al usuario Carrion de forma forzosa:
Unblock-SmbShareAccess -Name rutilla -AccountName carrion -Force
ACL - Access Control Lists
Ver las características de una carpeta en formato lista:
Get-Acl -Path .\rutas | Format-List
Recogemos las características de una carpeta en una variable:
$nuevoacl = Get-Acl -Path .\rutas
Ver qué contiene la variable creada:
Write-Output $nuevoacl
Definir variables con valores para usarlas posteriormente
Primero vamos a crear distintas variables independientes:
$identidad = "DESKTOP-A2UI9R8\Carrion"
$derechos = "FullControl"
$tipo = "Allow"
$argumentos = $identidad, $derechos, $tipo
Ahora meteremos todas las variables creadas como argumentos de una única variable:
$regla = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $argumentos
Le metemos una nueva regla a las características de la carpeta recogida en la variable:
$nuevoacl.SetAccessRule($regla)
Estableceremos la nueva ACL (Access Control List) creada:
Set-Acl -Path .\rutas -AclObject $nuevoacl
Vemos como han quedado las características de la carpeta:
Get-Acl -Path .\rutas | Format-List
Impresoras
Ver las impresoras instaladas en el sistema:
Get-Printer
Ver los drivers de impresoras que hay instalados.
Get-PrinterDriver
Ver los puertos de las impresoras.
Get-PrinterPort
Estos tres parámetros deben configurarse para poder compartir y añadir impresoras
Añadir una nueva impresora:
Add-Printer
Añadir una nuevo puerto para la impresora:
Add-PrinterPort
Añadir un nuevo driver para la impresora.
Add-PrinterDriver
Gestionar las impresoras
Con este comando creamos una nueva impresora:
Add-Printer -Name Impresoranueva -DriverName "HP Universal Printing PCL 6" -PortName "PORTPROMPT:"
Borramos una impresora:
Remove-Printer -Name Impresoranueva
Vemos las características de una impresora específica:
Get-Printer -Name Impresoranueva | Format-List
Establece la impresora "Impresoranueva" como compartida en la red con el nombre de compartido "Impresoracompartida":
Set-Printer -Name Impresoranueva -Shared $true -ShareName "Impresoracompartida"
Conclusión
Hay que tener en cuenta que estos son solo algunos de los comandos básicos que podemos usar en Powershell, las posibilidades con los comandos, el uso de variables y argumentos es mucho más extensa.
Si se solicita, se puede ampliar mucho más esta información profundizando más en cada apartado o añadiendo nuevos.