C'è qualcosa di veramente strano in questa lingua. Sto cercando di eseguire una funzione e utilizzare il suo valore di risultato come condizione. Questo è il mio codice:Condizione con una chiamata di funzione in 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"
}
Il risultato atteso è questo:
x64
64 bit platform
Ma l'uscita effettiva è questo:
64 bit platform
32 bit platform
cosa sta succedendo qui? Come si puo aggiustare? Non sono riuscito a trovare alcun esempio sul web che utilizzi funzioni all'interno di una condizione if
. E 'possibile a Powershell? Sono su Windows 7 senza configurazioni speciali, quindi ho la versione PS che viene con esso.
Grazie per la spiegazione completa. Usare parentesi attorno al nome della funzione sembra davvero chiamare la funzione, quindi questa sembra una soluzione universale a tali problemi. Molto più semplice dell'utilizzo di un altro nome di variabile per questo. L'eco nella funzione (sostituito da un host di scrittura per essere funzionale) è solo a scopo di traccia. Questo è uno script di testcase. Anche se ora vedo il seguente output: "x64", "64 bit platform", "x64". La chiamata WMI sembra restituire una stringa localizzata, per me è "64 bit". L'altro assegno è ampiamente utilizzato altrove, a quanto pare. – ygoe
'OSArchitecture' restituisce una stringa' "32-Bit" 'o' "64-Bit" ', a seconda dell'architettura del SO, quindi dovresti adattare le condizioni a quello. –