3 votos

Creación dinámica de alias en PowerShell

Me gustaría crear algún alias dinámicamente pero no puedo conseguir mi código de trabajo. Aquí está el código:

Cuando escribo "a", "b" o a cualquiera de las cartas en $drives, debe cambiar mi directorio de trabajo a la letra de la unidad (por ejemplo: A:).

El error que estoy recibiendo ahora es esto:

¿Alguien me puede ayudar conseguir que funcione, por favor?

3voto

Ben N Puntos 1071

El problema inmediato es que PowerShell es interpretar -Value GoToDrive($drive) como especificar el modificador -Value 'GoToDrive' y también un parámetro posicional $drive. (Esto es extraño y poco intuitivo, sí.) Acompañando GoToDrive($drive) entre paréntesis intentaría llamar a la aún inexistente GoToDrive de la función y, a continuación, utilizar los resultados como el argumento -Value, que no es lo que buscas, incluso si GoToDrive habían sido definidos previamente. Otro problema es que los alias no puede proporcionar argumentos para el comando que ellos llaman; sólo son nombres alternativos para los comandos.

Usted necesita para ejecutar comandos de forma dinámica que crear el acceso directo funciones:

# This is the exact same GoToDrive function you've been using
function GoToDrive($drive) {
    $formatted = "$($drive):\"
    if (Test-Path $formatted) {
        Set-Location $formatted
    } else {
        Write-Host "`"$formatted`" does not exist."
    }
}

# This does the magic
'a', 'b', 'c', 'd', 'e' | % {iex "function $_ {GoToDrive '$_'}"}

Invoke-Expressiono iex , para abreviar, se ejecuta su determinado en tiempo de ejecución argumento como si la hubiera escrito en la línea de comandos a ti mismo. De manera que la última línea se ejecuta function a {GoToDrive 'a'}, a continuación, function b {GoToDrive 'b'}, y así sucesivamente.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: