Suche…


Einführung

Variablen werden zum Speichern von Werten verwendet. Wenn der Wert von einem beliebigen Typ ist, müssen wir ihn irgendwo speichern, damit er in der Konsole / im Skript verwendet werden kann. Variablennamen in PowerShell beginnen wie in $ Variable1 mit einem $. Werte werden mit = zugewiesen, wie $ Variable1 = "Wert 1". PowerShell unterstützt eine große Anzahl von Variablentypen. B. Textzeichenfolgen, Ganzzahlen, Dezimalzahlen, Arrays und sogar erweiterte Typen wie Versionsnummern oder IP-Adressen.

Einfache Variable

Alle Variablen in Powershell beginnen mit einem US-Dollar-Zeichen ( $ ). Das einfachste Beispiel dafür ist:

$foo = "bar"

Diese Anweisung weist eine Variable namens foo mit dem Zeichenfolgenwert "bar" zu.

Eine Variable entfernen

Um eine Variable aus dem Speicher zu entfernen, können Remove-Item Cmdlet Remove-Item verwenden. Hinweis: Der Variablenname enthält NICHT das $ .

Remove-Item Variable:\foo

Variable hat einen Anbieter, der den meisten * -item-Cmdlets erlaubt, ähnlich wie Dateisysteme zu arbeiten.

Eine andere Methode zum Entfernen von Variablen ist die Verwendung des Remove-Variable-Cmdlets und des Aliasnamens 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

Umfang

Der Standardumfang für eine Variable ist der umschließende Behälter. Wenn Sie sich außerhalb eines Skripts oder eines anderen Containers befinden, ist der Gültigkeitsbereich Global . Um einen Bereich anzugeben, wird diesem der Variablenname $scope:varname vorangestellt:

$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

Ausgabe:

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

Lesen einer CmdLet-Ausgabe

Standardmäßig gibt powershell die Ausgabe an die aufrufende Entität zurück. Betrachten Sie unter Beispiel,

Get-Process -Name excel   

Dies würde einfach den laufenden Prozess, der dem Namen Excel entspricht, an die aufrufende Entität zurückgeben. In diesem Fall den PowerShell-Host. Es druckt etwas wie

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

Wenn Sie nun die Ausgabe einer Variablen zuweisen, wird nichts gedruckt. Und natürlich enthält die Variable die Ausgabe. (Sei es ein String, Object - Jeder Typ für diese Angelegenheit)

$allExcel = Get-Process -Name excel

Nehmen wir an, Sie haben ein Szenario, in dem Sie eine Variable mit einem dynamischen Namen zuweisen möchten. Sie können den Parameter -OutVariable

Get-Process -Name excel -OutVariable AllRunningExcel

Beachten Sie, dass hier das '$' fehlt. Ein Hauptunterschied zwischen diesen beiden Zuweisungen besteht darin, dass die Ausgabe außer der Zuweisung zu der Variablen AllRunningExcel auch gedruckt wird. Sie können sie auch einer anderen Variablen zuweisen.

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

Das obige Szenario ist jedoch sehr selten, beide Variablen $ VarOne und $ VarTwo haben den gleichen Wert.

Nun bedenke dies,

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

Die erste Anweisung würde einfach Excel-Prozess abrufen und der MSOFFICE-Variablen zuweisen, und als Nächstes würden MS-Wortprozesse ausgeführt und an den vorhandenen Wert von MSOFFICE angehängt. Es würde so aussehen,

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     

Listenzuordnung mehrerer Variablen

Powershell erlaubt die Mehrfachzuweisung von Variablen und behandelt fast alles wie ein Array oder eine Liste. Das bedeutet, anstatt etwas zu tun:

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

Sie können dies einfach tun:

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

Da Powershell Zuweisungen auf diese Weise wie Listen behandelt, wird die letzte Variable zu einem Array der verbleibenden Werte, wenn sich in der Liste mehr Werte befinden als in der Liste der Variablen, denen sie zugewiesen werden sollen. Das bedeutet, dass Sie auch folgende Dinge tun können:

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

Arrays

Die Array-Deklaration in Powershell ist fast identisch mit der Instanziierung aller anderen Variablen, dh Sie verwenden die Syntax $name = . Die Elemente im Array werden deklariert, indem sie durch Kommas ( , ) getrennt werden:

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

Hinzufügen zu einer Arry

Das Hinzufügen eines Arrays ist so einfach wie der Operator +

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

Arrays miteinander kombinieren

Dies ist wiederum so einfach wie der Operator +

$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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow