PowerShell
Variabili in PowerShell
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