Ricerca…


introduzione

Le variabili sono utilizzate per la memorizzazione dei valori. Lascia che il valore sia di qualsiasi tipo, abbiamo bisogno di memorizzarlo da qualche parte in modo che possiamo usarlo attraverso la console / script. I nomi delle variabili in PowerShell iniziano con $ , come in $ Variable1 , e i valori sono assegnati usando = , come $ Variable1 = "Valore 1". PowerShell supporta un numero enorme di tipi di variabile; come stringhe di testo, numeri interi, decimali, matrici e persino tipi avanzati come numeri di versione o indirizzi IP.

Variabile semplice

Tutte le variabili in PowerShell iniziano con un segno di dollaro statunitense ( $ ). L'esempio più semplice di questo è:

$foo = "bar"

Questa affermazione alloca una variabile chiamata foo con un valore stringa di "bar".

Rimozione di una variabile

Per rimuovere una variabile dalla memoria, si può usare il cmdlet Remove-Item . Nota: il nome della variabile NON include $ .

Remove-Item Variable:\foo

Variable ha un provider che consente alla maggior parte dei cmdlet * -item di funzionare in modo molto simile ai file system.

Un altro metodo per rimuovere la variabile è usare il cmdlet Remove-Variable e il suo alias rv

$var = "Some Variable" #Define variable 'var' containing the string 'Some Variable'
$var #For test and show string 'Some Variable' on the console

Remove-Variable -Name var
$var 

#also can use alias 'rv'
rv var

Scopo

L' ambito predefinito per una variabile è il contenitore che lo contiene. Se all'esterno di uno script o di un altro contenitore, l'ambito è Global . Per specificare un ambito , è preceduto dal nome della variabile $scope:varname modo:

$foo = "Global Scope"
function myFunc {
    $foo = "Function (local) scope"
    Write-Host $global:foo
    Write-Host $local:foo
    Write-Host $foo
}
myFunc
Write-Host $local:foo
Write-Host $foo

Produzione:

    Global Scope
    Function (local) scope
    Function (local) scope
    Global Scope
    Global Scope

Lettura di un output CmdLet

Per impostazione predefinita, powershell restituisce l'output all'entità chiamante. Considera sotto l'esempio,

Get-Process -Name excel   

Ciò semplicemente restituirebbe all'entità chiamante il processo in esecuzione che corrisponde al nome excel. In questo caso, l'host PowerShell. Stampa qualcosa come,

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName                                                                                                                     
-------  ------    -----      ----- -----   ------     --  -- -----------                                                                                                                     
   1037      54    67632      62544   617     5.23   4544   1 EXCEL 

Ora se assegni l'output a una variabile, semplicemente non stamperà nulla. E naturalmente la variabile mantiene l'output. (Sia una stringa, Oggetto - Qualsiasi tipo per quella materia)

$allExcel = Get-Process -Name excel

Quindi, diciamo che hai uno scenario in cui vuoi assegnare una variabile con un nome dinamico, puoi usare il parametro -OutVariable

Get-Process -Name excel -OutVariable AllRunningExcel

Si noti che il '$' manca qui. Una grande differenza tra questi due compiti è che, inoltre, stampa l'output oltre a assegnarlo alla variabile AllRunningExcel. Puoi anche scegliere di assegnarlo a un'altra variabile.

$VarOne = Get-Process -Name excel -OutVariable VarTwo

Anche se lo scenario sopra è molto raro, entrambe le variabili $ VarOne e $ VarTwo avranno lo stesso valore.

Ora considera questo,

Get-Process -Name EXCEL -OutVariable MSOFFICE
Get-Process -Name WINWORD -OutVariable +MSOFFICE

La prima istruzione otterrebbe semplicemente il processo excel e lo assegnerà alla variabile MSOFFICE, e in seguito otterrebbe i processi di parola ms in esecuzione e "Accoda" al valore esistente di MSOFFICE. Sembrerebbe qualcosa del genere,

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName                                                                                                                     
-------  ------    -----      ----- -----   ------     --  -- -----------                                                                                                                     
   1047      54    67720      64448   618     5.70   4544   1 EXCEL                                                                                                                           
   1172      70    50052      81780   584     1.83  14968   1 WINWORD     

Assegna lista di variabili multiple

Powershell consente l'assegnazione multipla di variabili e tratta quasi tutto come un array o un elenco. Ciò significa che invece di fare qualcosa del genere:

$input = "foo.bar.baz"
$parts = $input.Split(".")
$foo = $parts[0]
$bar = $parts[1]
$baz = $parts[2]

Puoi semplicemente fare questo:

$foo, $bar, $baz = $input.Split(".")

Poiché Powershell tratta gli incarichi in questo modo come gli elenchi, se nell'elenco sono presenti più valori rispetto agli elementi dell'elenco di variabili a cui assegnarli, l'ultima variabile diventa una matrice dei valori rimanenti. Ciò significa che puoi anche fare cose del genere:

$foo, $leftover = $input.Split(".") #Sets $foo = "foo", $leftover = ["bar","baz"]
$bar = $leftover[0] # $bar = "bar"
$baz = $leftover[1] # $baz = "baz"

Array

La dichiarazione di array in Powershell equivale quasi a creare un'istanza di qualsiasi altra variabile, ovvero si utilizza una sintassi $name = . Gli elementi dell'array vengono dichiarati separandoli con le virgole ( , ):

$myArrayOfInts = 1,2,3,4
$myArrayOfStrings = "1","2","3","4"

Aggiungendo a un arry

L'aggiunta a un array è semplice come utilizzare l'operatore + :

$myArrayOfInts = $myArrayOfInts + 5
//now contains 1,2,3,4 & 5!

Combinare insieme gli array

Ancora una volta questo è semplice come usare l'operatore +

$myArrayOfInts = 1,2,3,4
$myOtherArrayOfInts = 5,6,7
$myArrayOfInts = $myArrayOfInts + $myOtherArrayOfInts
//now 1,2,3,4,5,6,7


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow