Búsqueda de sitios web

Diversión del viernes: tomar un atajo en el mensaje de PowerShell


Para comenzar el nuevo año pensé en tomar un atajo y recuperar algo de espacio desperdiciado en mi indicador de PowerShell. Sé que me encuentro con este problema durante las clases y conferencias. Quizás usted también lo encuentre. Está en la consola de PowerShell y ha terminado en una estructura de directorio profunda, por lo que el mensaje y la consola ahora se ven así:

Como puede ver, no me queda mucho espacio en mi mensaje. Por lo general, si me quedo en un lugar, por ejemplo para demostraciones, crearé un PSDrive con un nombre más corto. Utilizo el comando New-PSDriveHere del módulo PSScriptTools. Pero otra opción es truncar el mensaje. Entonces, en lugar del camino largo que ve aquí, podría ser C:\Users...\HelpDesk. Modifiqué la función de aviso predeterminada de PowerShell para hacer precisamente eso.

ShortLocation-Prompt.ps1:


Function prompt {

    $location = $executionContext.SessionState.Path.CurrentLocation.path
    #what is the maximum length of the path before you begin truncating?
    $len = 33

    if ($location.length -gt $len) {

        #split on the path delimiter which might be different on non-Windows platforms
        $dsc = [system.io.path]::DirectorySeparatorChar
        #escape the separator character to treat it as a literal
        #filter out any blank entries which might happen if the path ends with the delimiter
        $split = $location -split "\$($dsc)" | Where-Object { $_ -match "\S+" }
        #reconstruct a shorted path
        $here = "{0}$dsc{1}...$dsc{2}" -f $split[0], $split[1], $split[-1]

    }
    else {
        #length is ok so use the current location
        $here = $location
    }

    "PS $here$('>' * ($nestedPromptLevel + 1)) "
    # .Link
    # https://go.microsoft.com/fwlink/?LinkID=225750
    # .ExternalHelp System.Management.Automation.dll-help.xml

}

La función está diseñada para funcionar en varias plataformas y tiene un diseño bastante simple. Si la longitud de la ubicación actual es mayor que algún valor, mi valor predeterminado es 33, luego divida la ruta en el carácter separador de directorio. Debe ser\o /. Luego construya una ruta acortada usando los primeros 2 elementos de la matriz dividida y el último elemento. Entre medias estoy insertando una elipse (…) aunque puedes usar lo que quieras.

Mira lo que sucede ahora cuando cargo la nueva función de aviso:

Ahora mi ubicación inmediata se actualiza dinámicamente.

Y también funciona multiplataforma.

Obtenga la función de solicitud en el script de su perfil de PowerShell y estará listo. Déjame saber lo que piensas o si encuentras algún problema. Disfruta y ten un buen fin de semana.

Artículos relacionados