2013-09-25 74 views
12

簡易質問:

32ビットシステムのPowerShellスクリプトで$ {env:ProgramFiles(x86)}変数を使用すると "C:\ Program Files"が返されるのですか?

x64システムでは、x64とx86モードの両方で実行している場合、「C:\ Program Files(x86)」にマップされます。私は32bitシステムをテストするつもりはありませんが、 "C:\ Program Files"フォルダにマップされているので、どのシステムでもx86プログラムを参照することができます。

+0

両方のアーキテクチャ用に開発している場合は、両方で実際にテストする必要があります。 –

+0

私はx86環境を要求しましたが、これはどこかで文書化されると考えました。どこでもオンラインで見つけることができませんでした:-( –

+1

[x64とx86のバラツキからプログラムする最善の方法は何ですか](http://stackoverflow.com/questions/602060/what-is-the-best) x64-vs-x86-可変性) –

答えて

17

${env:ProgramFiles(x86)}は、32ビットマシンでは定義されていません。 $nullに対してテストして確認できます。

+4

ありがとう!私は、-ne演算子「Null coalescing」を使用して終わりました。http://sackoverflow.com/a/17647824/17373 –

+2

これは賢いコードですが、正確には分かりません。:$ dir =($ {env:ProgramFiles(x86)}、$ {env:ProgramFiles} -ne $ null)[0] '。 PowerShellが実際に持っていたがっていますか?演算子。 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

ちょうど正確に言えば、32ビットシステムでは、環境変数は定義されていません。たとえば、 'dir env:'を実行した場合、それは存在しません。ただし、存在しない変数にアクセスしようとすると、PowerShellは$ nullを返します。 – StephenD

関連する問題