Saltar al contenido principal

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.

Ayuda

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
Cuidado:

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.