En un script de PowerShell, ¿cómo se obtiene el valor de una variable de entorno cuyo nombre contiene paréntesis?Nombres de variables de entorno con paréntesis, como% ProgramFiles (x86)%, en PowerShell?
Para complicar las cosas, los nombres de algunas variables contienen paréntesis, mientras que otros tienen nombres similares sin paréntesis. Por ejemplo (usando cmd.exe
):
C:\>set | find "ProgramFiles"
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
Vemos que %ProgramFiles%
no es lo mismo que %ProgramFiles(x86)%
.
Mi código de PowerShell está fallando de una manera extraña porque está ignorando la parte del nombre de la variable de entorno después de los paréntesis. Dado que esto coincide con el nombre de diferente, pero la variable de entorno existente no falla, obtengo el valor correcto de la variable incorrecta.
Aquí es una función de prueba en el idioma PowerShell secuencias de comandos para ilustrar mi problema:
function Do-Test
{
$ok = "C:\Program Files (x86)" # note space between 's' and '('
$bad = "$Env:ProgramFiles" + "(x86)" # uses %ProgramFiles%
$d = "${ Env:ProgramFiles(x86) }" # fail (2), LINE 6
# $d = "$Env:ProgramFiles(x86)" # fail (1)
if ($d -eq $ok) {
Write-Output "Pass"
} elseif ($d -eq $bad) {
Write-Output "Fail: (1) %ProgramFiles% used instead of %ProgramFiles(x86)%"
} else {
Write-Output "Fail: (2) some other reason"
}
}
Y aquí está la salida:
PS> Do-Test
Fail: (2) some other reason
¿Hay un simple cambio que puedo hacer a la línea 6 de arriba para obtener el valor correcto de% ProgramFiles (x86)%?
NOTA: En el texto de esta publicación utilizo la sintaxis del archivo por lotes para variables de entorno como una abreviatura conveniente. Por ejemplo% SOME_VARIABLE% significa "el valor de la variable de entorno cuyo nombre es SOME_VARIABLE". Si supiera la sintaxis escapada correctamente en PowerShell, no necesitaría hacer esta pregunta.
Quizás útil: http://geekswithblogs.net/Lance/archive/2009/12/29/program-files-environment-variable-in-powershell.aspx – Kiquenet