Obtener la ubicación actual del script de PowerShell

  1. Uso del cmdlet Split-Path para obtener la ubicación actual del script de PowerShell
  2. Uso de la variable $PSScriptRoot para obtener la ubicación actual del script de PowerShell
  3. Obtener el directorio de trabajo en Windows PowerShell para obtener la ubicación actual del script de PowerShell
Obtener la ubicación actual del script de PowerShell

Siempre que necesitemos hacer referencia a un módulo o secuencia de comandos común, nos gustaría utilizar rutas relativas al archivo de secuencia de comandos actual. De esa forma, la secuencia de comandos siempre puede encontrar otras secuencias de comandos en la biblioteca.

En este artículo, discutiremos diferentes formas de obtener la ubicación actual del script de PowerShell en ejecución.

Uso del cmdlet Split-Path para obtener la ubicación actual del script de PowerShell

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

Split-Path -Parent $($global:MyInvocation.MyCommand.Definition)

El cmdlet Split-Path se usa con el parámetro -Parent para devolver el directorio actual del script en ejecución.

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

También vale la pena señalar que ejecutar la sintaxis anterior en el entorno de scripting integrado (ISE) de PowerShell como una selección (Ejecutar como una selección o presionar F8) activará un ParameterArgumentValidationErrorNullNotAllowed o una excepción nula.

Un remedio simple para solucionar el problema es llamar a la variable $psISE y obtener la propiedad CurrentFile.FullPath, y desde allí, puede obtener la ubicación actual del script. Recuerde que esta sintaxis se utiliza mejor cuando se prueba en PowerShell ISE.

Split-Path $psISE.CurrentFile.FullPath

Uso de la variable $PSScriptRoot para obtener la ubicación actual del script de PowerShell

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

La variable $PSScriptRoot devuelve el valor del directorio del script en ejecución.

$PSScriptRoot

Obtener 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. Puede usar esta variable y esta propiedad para buscar los objetos de ejecución disponibles para los cmdlets, incluido el directorio de trabajo actual del script de Windows PowerShell en ejecución.

$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('.\')

Sin embargo, si está ejecutando la última versión de Windows PowerShell, se ha introducido un cmdlet independiente 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.

(Get-Location).Path
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