Viernes divertido: abra el último archivo en PowerShell ISE
En los últimos artículos, he estado compartiendo algunos atajos para obtener los archivos usados o editados más recientemente. Para el viernes divertido de hoy pensé en compartir algo que uso en mi perfil de PowerShell ISE. Cada vez que inicio ISE, abro automáticamente el último archivo en el que estaba trabajando. En lugar de iniciar ISE y luego buscar el archivo más reciente en la lista en Archivo, esto sucede automáticamente.
Encontré información sobre este tema en PowerShell.com y la revisé para satisfacer mis necesidades. Los archivos usados más recientemente se almacenan en un archivo de configuración XML, lo cual es bueno porque puedo usar PowerShell para analizar la información que necesito. Desafortunadamente, la ruta a este archivo es bastante difícil de manejar:
$env:LocalAppData\microsoft_corporation\powershell_ise.exe_StrongName_lw2v2vm3wmtzzpebq33gybmeoxukb04w\3.0.0.0
Lo que se traduce en algo como esto:
C:\Users\Jeff\AppData\Local\microsoft_corporation\powershell_ise.exe_StrongName_lw2v2vm3wmtzzpebq33gybmeoxukb04w\3.0.0.0
El archivo XML se llama user.config. Con eso, introduzcamos algo de PowerShell aquí para obtener el XML.
$path = "C:\Users\Jeff\AppData\Local\microsoft_corporation\powershell_ise.exe_StrongName_lw2v2vm3wmtzzpebq33gybmeoxukb04w\3.0.0.0"
$configpath = Join-path -path $path -ChildPath user.config
[xml]$config = Get-Content $configpathLa lista de usuarios recientes se almacena en la configuración del usuario.
El valor debe tener lo que necesito.
Parece que es una serie de cadenas.
Acercarse. Parece que el último paso que necesito es esa propiedad de cadena.
Esta debería ser la misma lista que veo en Archivo. Pero si bien esto funciona, se supone que la configuración que quiero siempre estará en la posición 5 y que sé cómo llegar allí en primer lugar. La forma más inteligente es utilizar un filtro XPATH para encontrar los datos. Puedo usar el método SelectNodes().
$config.SelectNodes('//setting[@name="MRU"]')
Básicamente, la consulta dice encontrar cualquier nodo que sea una
Con esto es igual de fácil obtener el archivo más reciente.
$n = $config.SelectNodes('//setting[@name="MRU"]')
$n.value.ArrayOfString.string | select -first 1Una vez que conozco el nombre del archivo, es trivial cargarlo en el ISE.
psedit $n.value.ArrayOfString.string[0]La otra forma en que podría haber seleccionado el nodo es con Select-XML.
Select-Xml -Xml $config -XPath '//setting[@name="MRU"]'La propiedad del nodo tiene la configuración que necesito. Puedo simplemente seguir perforando hasta obtener el valor que quiero.
(Select-Xml -Xml $config -XPath '//setting[@name="MRU"]').node.Value.ArrayOfString.String[0]
En este caso sólo estoy seleccionando el primer elemento. Podría haber usado estos fragmentos de código en mi perfil, pero decidí crear una función para recuperar la lista MRU.
Function Get-ISEMRU {
[cmdletbinding()]
Param()
<#
Path will be something like:
C:\Users\Jeff\AppData\Local\microsoft_corporation\powershell_ise.exe_StrongName_lw2v2vm3wmtzzpebq33gybmeoxukb04w
#>
$ISEPath = "$env:localappdata\microsoft_corporation\powershell_ise*\3.0.0.0"
Try {
$folder = (Resolve-Path -Path $ISEPath -ErrorAction Stop).Path
}
Catch {
Write-Warning "Failed to get ISE folder from $ISEPath"
Write-Warning $_.exception.message
#Bail out
Return
}
If ($folder) {
#construct the path to user.config
$path = Join-Path -Path $folder -ChildPath "user.config"
#verify the file exists just in case
if (Test-Path -path $path) {
#using -Raw sends everything at once as a huge string
#and boosts performance a bit.
[xml]$xml = Get-Content -Path $path -Raw
#get the MRU setting as a string using an XPath filter
$xml.SelectNodes('//setting[@name="MRU"]').Value.ArrayOfString.string
}
else {
Write-Warning "Can't find $path"
}
} #if $folder
} #end Get-ISEMRULa función resume todo lo que les he mostrado. Aunque configuré una ruta predeterminada usando un comodín.
$ISEPath = "$env:localappdata\microsoft_corporation\powershell_ise*\3.0.0.0"Hice esto para que las cosas sean más fáciles de leer y en caso de que el valor del nombre seguro pueda cambiar en algún momento. Por cierto, estoy ejecutando esto en PowerShell 4.0. No lo he probado con la v5.
Para obtener la ruta completa, puedo resolver esta ruta con un comodín.
$folder = (Resolve-Path -Path $ISEPath -ErrorAction Stop).PathCasi todo lo demás es igual. Esta función está en mi script de perfil de PowerShell ISE y al final abro el archivo más reciente.
#open the most recently edited file
psedit (Get-ISEMRU)[0]Es fácil. Y como la función está en mi perfil, puedo ejecutarla en cualquier momento. Aunque tenga en cuenta que el archivo XML no se actualizará hasta que cierre el ISE. Personalmente, todas estas pequeñas cosas se suman a lo largo del día y hacen que mi trabajo sea un poco más divertido. Disfrutar.








