2013-09-25 8 views
12

domanda semplice:

Se uso il $ {ENV: ProgramFiles (x86)} variabile in uno script PowerShell su un sistema a 32 bit vuol tornare "C: \ Programmi" o è definito?

Su un sistema x64 verrà mappato su "C: \ Programmi (x86)" quando è in esecuzione in entrambe le modalità x64 e x86. Non ho un sistema a 32 bit per testare, ma spero che verrà mappato alla cartella "C: \ Programmi" in modo da poterlo usare per fare riferimento a programmi x86 su qualsiasi sistema.

+0

Se si sta sviluppando per entrambe le architetture, è necessario testare entrambi. –

+0

Ho una richiesta per un ambiente x86 ma ho pensato che questo sarebbe stato documentato da qualche parte. Impossibile trovarlo online ovunque :-( –

+1

possibile duplicato di [Qual è il modo migliore per programmare contro la variabilità di x64 vs x86 di powershell] (http://stackoverflow.com/questions/602060/what-is-the-best -way-to-program-against-powershells-x64-vs-x86-variability) –

risposta

17

${env:ProgramFiles(x86)} non è definito su un computer a 32 bit. Puoi provare contro $null per verificarlo.

+4

Grazie! Ho finito per utilizzare l'operatore -ne "Null coalescing" da http://stackoverflow.com/a/17647824/17373 da fare questo: '$ dir = ($ {env: ProgramFiles (x86)}, $ {env: ProgramFiles} -ne $ null) [0]'. Non bello ma funziona –

+2

Questo è codice intelligente ma non esattamente ovvio.: -) Mi piacerebbe davvero che PowerShell avesse?: E ?? operatori. https://connect.microsoft.com/PowerShell/feedback/details/53059/add-ternary-operator-to-script-language https://connect.microsoft.com/PowerShell/feedback/details/53061/add-operator -to-script-language –

+1

Per la precisione, su un sistema a 32 bit, la variabile d'ambiente non è definita, quindi per esempio se si esegue 'dir env:' non sarà presente. Tuttavia, PowerShell restituisce $ null se si tenta di accedere a una variabile che non esiste. – StephenD

Problemi correlati