Obtener la ubicación actual del script de PowerShell
-
Uso del cmdlet
Split-Path
para obtener la ubicación actual del script de PowerShell -
Uso de la variable
$PSScriptRoot
para obtener la ubicación actual del script de PowerShell - Obtener el directorio de trabajo en Windows PowerShell para 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn