Wie erhält man in einem PowerShell-Skript den Wert einer Umgebungsvariablen, deren Name Klammern enthält?Variablen der Umgebungsvariablen mit Klammern, wie% ProgramFiles (x86)%, in PowerShell?
Um die Sache zu komplizieren, enthalten einige Variablen Namen Klammern, während andere ähnliche Namen ohne Klammern haben. Zum Beispiel (unter Verwendung von 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)
Wir sehen, dass %ProgramFiles%
nicht die gleiche wie %ProgramFiles(x86)%
ist.
Mein PowerShell-Code schlägt auf seltsame Weise fehl, weil er den Teil des Namens der Umgebungsvariablen nach den Klammern ignoriert. Da dies passiert, um den Namen einer anderen, aber vorhandene, Umgebungsvariable nicht fehlschlagen, ich bekomme nur den richtigen Wert der falschen Variable.
Hier ist eine Testfunktion in der Sprache Powershell Scripting mein Problem zu veranschaulichen:
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"
}
}
Und hier ist der Ausgang:
PS> Do-Test
Fail: (2) some other reason
Gibt es eine einfache Änderung, die ich 6 oben auf der Linie machen kann den richtigen Wert von% ProgramFiles (x86)% erhalten?
HINWEIS: Im Text dieses Beitrags verwende ich Stapeldateisyntax für Umgebungsvariablen als bequeme Kurzschrift. Zum Beispiel bedeutet% SOME_VARIABLE% "den Wert der Umgebungsvariablen, deren Name SOME_VARIABLE ist". Wenn ich die Syntax in PowerShell richtig umgehen würde, müsste ich diese Frage nicht stellen.
Vielleicht nützlich: http://geekswithblogs.net/Lance/archive/2009/12/29/program-file-environment-variable-in-powershell.aspx – Kiquenet