Coś jest naprawdę dziwnego w tym języku. Próbuję wykonać funkcję i użyć jej wartości wyniku jako warunku. To jest mój kod:Stan z wywołaniem funkcji w PowerShell
function Get-Platform()
{
# Determine current Windows architecture (32/64 bit)
if ([System.Environment]::GetEnvironmentVariable("ProgramFiles(x86)") -ne $null)
{
echo "x64"
return "x64"
}
else
{
echo "x86"
return "x86"
}
}
if (Get-Platform -eq "x64")
{
echo "64 bit platform"
}
if (Get-Platform -eq "x86")
{
echo "32 bit platform"
}
oczekiwany wynik to:
x64
64 bit platform
Ale rzeczywista moc jest taka:
64 bit platform
32 bit platform
Co tu się dzieje? Jak to może zostać naprawione? Nie mogłem znaleźć żadnych przykładów w Internecie, które używają funkcji w stanie if
. Czy to w ogóle możliwe w Powershell? Pracuję w systemie Windows 7 bez specjalnej konfiguracji, więc mam z nim dowolną wersję PS.
Dziękuję za pełne wyjaśnienie. Używanie nawiasów wokół nazwy funkcji wydaje się naprawdę wywoływać funkcję, więc wydaje się, że jest to uniwersalne rozwiązanie takich problemów. Znacznie prostsze niż użycie innej nazwy zmiennej. Echo w funkcji (zastąpione przez Write-Host, aby było funkcjonalne) służy wyłącznie do śledzenia. To jest skrypt testowy. Chociaż teraz widzę następujący wynik: "x64", "platforma 64-bitowa", "x64". Wydaje się, że wywołanie WMI zwraca zwarty łańcuch, dla mnie jest to "64-bitowy". Inne sprawdzanie jest szeroko stosowane w innych miejscach, jak się wydaje. – ygoe
'OSArchitecture' zwraca ciąg' '32-bitowy' 'lub' "64-Bit" ', w zależności od architektury systemu operacyjnego, więc musisz dostosować warunki do tego. –