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