Cómo obtener la ubicación actual del script de PowerShell

  1. Usando el cmdlet Split-Path para Obtener la Ubicación Actual del Script de PowerShell
  2. Usando la Variable $PSScriptRoot para Obtener la Ubicación Actual del Script de PowerShell
  3. Obteniendo el Directorio de Trabajo en Windows PowerShell para Obtener la Ubicación Actual del Script de PowerShell
  4. Conclusión
Cómo obtener la ubicación actual del script de PowerShell

En esta guía completa, profundizamos en varios métodos para determinar la ubicación actual de un script de PowerShell, un aspecto fundamental que mejora la portabilidad y la fiabilidad del script. Cada método discutido se adapta a diferentes versiones de PowerShell y escenarios de scripting, asegurando una amplia aplicabilidad.

Comenzamos con el cmdlet Split-Path, un enfoque versátil para versiones anteriores de PowerShell, y luego pasamos a la conveniencia de $PSScriptRoot en PowerShell 3 y posteriores. Además, exploramos el robusto método $ExecutionContext y el simple cmdlet Get-Location, adaptándose a diversos entornos y requisitos.

Finalmente, simplificamos el proceso con el conocido alias pwd, demostrando la adaptabilidad de PowerShell.

Usando el cmdlet Split-Path para Obtener la Ubicación Actual del Script de PowerShell

Antes de PowerShell 3, no había una mejor manera de consultar la propiedad MyInvocation.MyCommand.Definition utilizando el cmdlet Split-Path.

El propósito principal de usar Split-Path con $global:MyInvocation es extraer la ruta del directorio del script de PowerShell que se está ejecutando. Esto es especialmente útil cuando los scripts necesitan interactuar con otros archivos o directorios en la misma ubicación que el script o cuando el comportamiento del script depende de su ubicación.

$scriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Definition
Write-Host "Current script location: $scriptDirectory"

En este ejemplo, utilizamos Split-Path con el parámetro -Parent para aislar el componente del directorio de la ruta completa del script en ejecución. Esta ruta se obtiene de $MyInvocation.MyCommand.Definition.

La ruta del directorio resultante se almacena en la variable $scriptDirectory.

Finalmente, usamos Write-Host para mostrar esta ruta del directorio, proporcionando una vista clara e inmediata de la ubicación actual del script. Este método no solo es eficiente sino que también asegura compatibilidad en diferentes versiones de PowerShell.

Salida:

obtener la ubicación actual del script de powershell - salida 1

Cabe señalar que esto funcionará solo si incluyes la sintaxis anterior en un archivo de PowerShell guardado (.ps1). Ejecutar la sintaxis anterior en la línea de comandos devolverá una excepción Null.

También vale la pena mencionar que ejecutar la sintaxis anterior en el Entorno de Scripting Integrado (ISE) de PowerShell como una selección (Ejecutar como selección o presionando F8) desencadenará un ParameterArgumentValidationErrorNullNotAllowed o una excepción Null.

Un remedio simple para solucionar el problema es llamar a la variable $psISE y obtener la propiedad CurrentFile.FullPath, y desde allí, puedes obtener la ubicación actual del script.

Usando la Variable $PSScriptRoot para Obtener la Ubicación Actual del Script de PowerShell

Si estás ejecutando PowerShell versión 3 o posterior, se ha introducido una variable automática para almacenar el directorio del archivo o módulo actual.

La variable $PSScriptRoot contiene la ruta del directorio del script que se está ejecutando. Esta variable automática es increíblemente útil para crear scripts portables donde la codificación dura de rutas no es práctica.

Es especialmente útil cuando tus scripts necesitan cargar archivos o módulos que están ubicados en el mismo directorio que el propio script.

Write-Host "The current script is located in: $PSScriptRoot"

En nuestro script, usamos el cmdlet Write-Host para imprimir el valor de $PSScriptRoot. Esta variable contiene automáticamente la ruta completa del directorio donde se encuentra el script.

Al invocar Write-Host, aseguramos que la ruta se muestre en la consola de PowerShell. Este enfoque es fácil y efectivo, haciendo que el script sea versátil para varios entornos y escenarios.

Salida:

obtener la ubicación actual del script de powershell - salida 2

Obteniendo el Directorio de Trabajo en Windows PowerShell para Obtener la Ubicación Actual del Script de PowerShell

Ahora que hemos discutido cómo obtener la ubicación actual en el script, no estaría de más aprender a obtener el directorio de trabajo actual de nuestro script.

En Windows PowerShell v2, la variable $ExecutionContext contiene la propiedad EngineIntrinsics. Puedes usar esta variable y propiedad para encontrar los objetos de ejecución disponibles para los cmdlets, incluyendo el directorio de trabajo actual del script de Windows PowerShell en ejecución.

$currentScriptLocation = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('.\')
Write-Host "Current script location: $currentScriptLocation"

En este ejemplo, utilizamos $ExecutionContext para adquirir la ubicación del script actual. Al llamar al método GetUnresolvedProviderPathFromPSPath con el parámetro '.\', le pedimos efectivamente a PowerShell que traduzca el directorio actual (representado por '.\') en una ruta completa.

El resultado se almacena en la variable $currentScriptLocation, que luego mostramos utilizando Write-Host. Este método es particularmente robusto, ya que no depende de que el script se ejecute de una manera específica y funciona en diferentes versiones de PowerShell.

Salida:

obtener la ubicación actual del script de powershell - salida 3

Sin embargo, si estás ejecutando la versión más reciente de Windows PowerShell, se ha introducido un cmdlet separado para facilitar las cosas. Podemos usar el cmdlet Get-Location y llamar a la propiedad Path para obtener el directorio de trabajo actual del script.

$currentDirectory = (Get-Location).Path
Write-Host "Current directory: $currentDirectory"

En el código proporcionado, primero usamos el cmdlet Get-Location para recuperar el objeto de ubicación actual. Luego accedemos a su propiedad Path para obtener el directorio actual como una cadena, que almacenamos en la variable $currentDirectory.

Finalmente, usamos Write-Host para mostrar esta información. Este método es altamente efectivo para scripts que necesitan conocer su contexto de ejecución en términos de ubicación de directorio.

Salida:

obtener la ubicación actual del script de powershell - salida 4

En PowerShell, pwd es un alias para el cmdlet Get-Location. El cmdlet Get-Location recupera el directorio de trabajo actual de la sesión de PowerShell, que es exactamente lo que hace el comando tradicional pwd (imprimir directorio de trabajo) en sistemas similares a Unix.

PowerShell, teniendo en cuenta su flexibilidad y compatibilidad, proporciona estos alias para facilitar el uso a los usuarios que están familiarizados con otros entornos de shell (como Unix o Linux) para usar comandos similares en PowerShell.

$currentDirectory = pwd
Write-Host "Current directory: $currentDirectory"

En este ejemplo, usamos el comando pwd para obtener el objeto de ubicación actual, que luego se almacena en la variable $currentDirectory. Al aprovechar Write-Host, mostramos la ruta del directorio actual en la consola.

Este método es notablemente sencillo y no requiere ninguna sintaxis compleja ni parámetros adicionales. Es una forma rápida y confiable de determinar el directorio desde el cual se está ejecutando el script.

Salida:

obtener la ubicación actual del script de powershell - salida 5

Conclusión

Este artículo ha proporcionado una exploración exhaustiva de varios métodos para determinar la ubicación actual de un script de PowerShell, cada uno adaptado a diferentes versiones de PowerShell y contextos de scripting. Desde el cmdlet Split-Path adecuado para versiones anteriores hasta la variable automática $PSScriptRoot en versiones posteriores, la guía asegura relevancia para una amplia gama de usuarios de PowerShell.

Además, el uso de $ExecutionContext y el cmdlet Get-Location ofrece alternativas robustas y sencillas, respectivamente, mientras que el alias pwd presenta una opción familiar para usuarios de diferentes antecedentes de scripting. Esta guía completa no solo mejora la portabilidad y fiabilidad de los scripts, sino que también subraya la naturaleza versátil de PowerShell.

Equipados con estas técnicas, los escritores de scripts y administradores de sistemas están mejor preparados para manejar las dependencias de rutas de archivo, haciendo que sus scripts sean más adaptables y efectivos en diversos entornos. En última instancia, entender estos métodos es fundamental para dominar la creación de scripts en PowerShell y optimizar la funcionalidad de los scripts en diferentes plataformas y escenarios.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn