Introducción a PowerShell

PowerShell es un shell de línea de comandos y entorno de scripts creado por Microsoft para sistemas Windows, utilizado principalmente para la administración del sistema y tareas de automatización.

EnWindows 11En el sistema, busque directamente en el menú InicioPowerShelly listo.

Los accesos directos habituales incluyen (por ejemplo, en sistemas de 64 bits):

Nombre del acceso directo Descripción
Windows PowerShell Versión de línea de comandos de 64 bits
Windows PowerShell ISE Editor de scripts gráfico de 64 bits
Windows PowerShell (x86) Versión de línea de comandos de 32 bits
Windows PowerShell ISE (x86) Editor de scripts gráfico de 32 bits

⚠️ Nota: Windows 11 no admite sistemas de 32 bits, pero aún incluye la versión x86 de PowerShell para compatibilidad con programas antiguos.


Métodos para iniciar PowerShell

Método de inicio normal

Haga clic en el acceso directo de Windows PowerShell para iniciar la consola de PowerShell.

La barra de título de la consola de PowerShell mostrará "Windows PowerShell".

Nota:Algunos comandos pueden ejecutarse correctamente al ejecutar PowerShell como usuario normal, pero PowerShell en sí no participa en el Control de cuentas de usuario (UAC) y no puede solicitar al usuario que eleve privilegios.

Explicación del Control de cuentas de usuario (UAC)

Función del UAC:Función de seguridad de Windows que evita que el código malicioso se ejecute con privilegios elevados.

Limitaciones de permisos del usuario normal:Al ejecutarse como usuario normal, intentar ejecutar comandos que requieren permisos de administrador provocará un error.

Por ejemplo, detener un servicio de Windows:

Stop-Service -Name W32Time

Ejemplo de mensaje de error:

Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to
the following error: Cannot open W32Time service on computer '.'.
At line:1 char:1
+ Stop-Service -Name W32Time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceCon
   troller:ServiceController) [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Comm
   ands.StopServiceCommand
Solución: senecesita ejecutar PowerShell con un usuario con privilegios elevados de administrador local.

Se ha configurado una segunda cuenta de usuario de dominio, que cumple con el principio de privilegio mínimo; no es administrador de dominio ni tiene privilegios elevados en el dominio.

Pasos:

  • Haga clic derecho en el acceso directo de Windows PowerShell
  • Seleccione "Ejecutar como administrador"

El sistema mostrará un aviso:Dado que ha iniciado sesión como usuario normal, Windows le pedirá las credenciales del usuario administrador local.

Confirmar la elevación:La barra de título de la ventana de PowerShell elevada mostrará "Administrador: Windows PowerShell".

Efecto:Al ejecutar comandos que requieren permisos de administrador en PowerShell elevado, ya no se encontrarán errores de UAC.

Principio de elevación de privilegios:Solo se debe elevar PowerShell como administrador cuando sea absolutamente necesario.

Equipos remotos:Al trabajar con equipos remotos, no es necesario elevar los privilegios de PowerShell. La elevación de privilegios solo afecta a los comandos locales.

Anclar acceso directo:Puede anclar el acceso directo de PowerShell o Windows Terminal a la barra de tareas para iniciarlo fácilmente:

Inicio seguro de PowerShell elevado:Si necesita iniciar PowerShell con privilegios elevados, mantenga presionada la tecla Shift, haga clic derecho en el icono de PowerShell anclado en la barra de tareas y seleccione "Ejecutar como administrador".


Guía para determinar la versión de PowerShell y la directiva de ejecución

1. Ver la versión de PowerShell

PowerShell proporciona la variable automática$PSVersionTableque contiene la versión y la información relacionada de la sesión actual de PowerShell.

$PSVersionTable

La salida es similar a la siguiente:

Name                           Value
----                           -----
PSVersion                      5.1.22621.2428
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22621.2428
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Notas sobre la versión

  • Windows PowerShell 5.1 viene preinstalado en las versiones de Windows actualmente compatibles y es la versión recomendada.
  • PowerShell 7 (versión multiplataforma) no es un reemplazo de Windows PowerShell 5.1, sino un producto diferente que se instala en paralelo.
  • PowerShell 6 (también conocido como PowerShell Core) ya no recibe soporte.

2. Comprender la directiva de ejecución (Execution Policy)

La directiva de ejecución es una función de seguridad de PowerShell que controla las condiciones de ejecución de scripts para evitar la ejecución involuntaria de scripts maliciosos.

Nota: la directiva de ejecución no es un límite de seguridad; los usuarios experimentados pueden omitirla.

Alcance de la directiva de ejecución

  • Se puede configurar para el equipo local (LocalMachine), el usuario actual (CurrentUser) o la sesión actual (Process).
  • También se puede administrar la directiva de ejecución de usuarios y equipos mediante la directiva de grupo.

Directivas de ejecución predeterminadas comunes de Windows

Versión del sistema operativo Directiva de ejecución predeterminada
Windows Server 2022 RemoteSigned
Windows Server 2019 RemoteSigned
Windows Server 2016 RemoteSigned
Windows 11 Restricted
Windows 10 Restricted

RestrictedIndica que, de forma predeterminada, no se permite ejecutar ningún script.

3. Consultar la directiva de ejecución actual

Consultar la directiva actual:

Get-ExecutionPolicy

La salida es similar a la siguiente:

Restricted 

Mostrar la configuración de la directiva de ejecución de todos los ámbitos:

Get-ExecutionPolicy -List

La salida es similar a la siguiente:

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

4. Ejemplos del impacto de la directiva de ejecución en la ejecución de scripts

Supongamos que hay un archivo de scriptGet-TimeService.ps1y que ejecutar el comando directamente en la línea de comandos interactiva funciona correctamente:

Get-Service -Name W32Time

Sin embargo, al ejecutar el mismo comando desde un script, PowerShell devolverá un error.

.\Get-TimeService.ps1

Mensaje de error:

.\Get-TimeService.ps1 : File C:\tmp\Get-TimeService.ps1 cannot be loaded
because running scripts is disabled on this system. For more information,
see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Get-TimeService.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

5. Modificar la directiva de ejecución

1. Establecer como RemoteSigned (recomendado)

Permite ejecutar scripts locales y scripts remotos firmados por editores de confianza.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  • Debe ejecutar PowerShell como administrador para poder cambiar la directiva de ejecución del equipo local (LocalMachine).
  • Al realizar el cambio aparecerá una solicitud de confirmación:
Do you want to change the execution policy? [Y] Yes  [A] Yes to All  ...

2. Modificar solo la directiva de ejecución del usuario actual (sin necesidad de permisos de administrador)

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

6. Mensajes de error comunes y soluciones

Error al modificar la directiva de LocalMachine sin privilegios de administrador elevados:

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.

Solución:Ejecute PowerShell como administrador y vuelva a intentarlo, o modifique solo la directiva del usuario actual.

7. Verificación después de la modificación

Después de modificar la directiva de ejecución aRemoteSignedejecute el script:

.\Get-TimeService.ps1

Salida:

Status   Name    DisplayName
------   ----    -----------
Running  W32Time Windows Time

8. Precauciones
  • Los scripts son archivos de texto sin formato cuya extensión es.ps1。
  • Se recomienda usarVisual Studio Codeo un editor de texto para escribir scripts.
  • Antes de modificar la directiva de ejecución, lea la documentación oficialabout_Execution_Policiespara conocer los riesgos de seguridad asociados.
Otras extensiones