2013-04-19 7 views
5

Mam pewne problemy, jeśli chodzi o przekazywanie odpowiednich zmiennych środowiskowych do procesu. Poniżej możesz zobaczyć część mojego kodu, abyś mógł zrozumieć, co próbuję zrobić.Przekazywanie zmiennych środowiskowych do procesu w programie PowerShell 2.0, gdy zmienna jest zmieniana wiele razy

Mam dwa pliki EXE, które muszę uruchomić. Procesy uruchamiają niektóre aktualizacje w zależności od lokalizacji zmiennej środowiskowej %MainFiles%. Po uruchomieniu kodu wydaje się, że pliki EXE nie rozpoznają zmiany. Jednak gdy patrzę pod właściwościami komputera, widzę, że zmienne są poprawnie zmieniane.

Czy ktoś wie, jak mogę zmusić proces do rozpoznania zmiany? Dzięki

while ($i -lt $Size) { 
    if ($TempEnv[$i] -eq "Done"){ 
    $ExitCode="Completed" 
    return 
    } else { 
    $Temp = $TempEnv[$i] 
    Write-Host ("Starting Update for " + $Temp) -foregroundcolor "Green" 

    [System.Environment]::SetEnvironmentVariable("MainFiles", "$Temp","Machine") 
    [System.Environment]::GetEnvironmentVariable("MainFiles","Machine") 
    Copy-Item $CopyInstallData -destination $Temp 
    $process = Start-Process XMLUpgrade.exe -WorkingDirectory "C:\Program Files\Dtm" -wait 
    $process = Start-Process Update.exe -WorkingDirectory "C:\Program Files\Dtm" -wait 
. 
. 
. 

Odpowiedz

3

Linia ta powoduje zmianę env var stałe:

[System.Environment]::SetEnvironmentVariable("MainFiles", "$Temp","Machine") 

Niestety PowerShell rozpoczęła już przed tym zbiorze. Jego blok env jest snapshotted w czasie uruchamiania. To środowisko jest dziedziczone przez dwa procesy potomne.

Aby uzyskać te dwa procesy, aby uruchomić z wartością zmiennej środowiskowej poprawne to zrobić najpierw:

$env:MainFiles = $Temp