Utilizzando PowerShell ‘Se’ dichiarazione di funzione di confronto (versione per Windows)

Attualmente sto creando un ANNUNCIO script che si può ottenere con i gruppi di ANNUNCI di un computer e trasferirli su una nuova macchina (in caso di errore di sistema).

Sono riuscito a mettere lo script per uscire e trovare le versioni di Windows che le due macchine sono in esecuzione tramite il loro nome host, tuttavia sto avendo un problema nella creazione di un ‘se’ dichiarazione di confrontare le due versioni di Windows.

L’idea è che se la sono la stessa versione (e la stessa versione del pacchetto) i gruppi saranno copiati automaticamente, ma non posso per la vita di me a capire come fare.

Si prega di considerare questo codice:

function W_version_current
{
    $current = Get-WmiObject Win32_OperatingSystem -computer $current_hostname.text | select buildnumber
    if ($current -match '7601')
    {
        "Windows 7"
    }
    elseif($current -match '2600')
    {
        "Windows XP"
    }
    elseif($current -eq $null)
    {
        "The box is empty"
    }
    else
    {
        "Function not supported"
    }
}

function W_version_target
{
    $target = Get-WmiObject Win32_OperatingSystem -computer $target_hostname.text | select buildnumber
    if ($var -match '7601')
    {
        "Windows 7"
    }
    elseif($target -match '2600')
    {
        "Windows XP"
    }
    elseif($target -eq $null)
    {
        "The box is empty"
    }
    else
    {
        "Function not supported"
    }
}

function compare_current_target
{
    if(W_version_current -eq W_version_target)
    {
        "Matching version of Windows detected"
    }
    else
    {
        "Versions of Windows do not match"
    }
}

Ora è vero che tutte le variabili non può essere letta al di fuori di funzioni?

Se è così, cosa posso fare?

InformationsquelleAutor obious | 2012-04-19

 

One Reply
  1. 0

    Probabilmente quello che ti manca è che con PowerShell ordine delle operazioni, che spesso hanno a mettere le chiamate di funzione in parentesi.

    Invece, provare questo:

    if ((W_version_current) -eq (W_version_target))
    {
        "Matching version of Windows detected"
    }
    else
    {
        "Versions of Windows do not match"
    }

    Per rispondere alla tua domanda, ambito in PowerShell funziona più o meno come la maggior parte degli altri linguaggi di scripting, ad esempio, le variabili dichiarate in funzioni non possono essere utilizzate al di fuori delle funzioni sono stati dichiarati, a meno che non si dichiarata globale, che si può fare in questo modo:

    $global:x = "hi"

    È quindi possibile utilizzare la variabile $x ovunque, o, se volete, $global:x, e si avrà il valore di "hi".

    • Quindi vuol dire che $global:X = “ciao” – X è una variabile globale con valore alto?
    • risposta aggiornati 🙂
    • vorrei consigliare semplicemente di giocare con potete capire come funziona abbastanza rapidamente
    • Ho cercato di usare globale varibles senza successo, ho anche manageed di output i risultati di entrambe le funzioni, ma quando cerco di confrontare le funzioni insieme, PS si blocca e devo per forza uscire Powershell ISE. Qualche idea del perché?
    • no, no idea – l’unica cosa che posso pensare è che ISE è rovinare. hai provato con la semplice console? inoltre, giusto per essere sicuri, hai provato a mettere tra parentesi le funzioni quando si confrontano loro, come per la mia risposta?
    • Sì, ho provato e ha funzionato. Grazie

Lascia un commento