Zoeken…


Invoering

Variabelen worden gebruikt voor het opslaan van waarden. Laat de waarde van elk type zijn, we moeten het ergens opslaan, zodat we het overal in de console / script kunnen gebruiken. Variabelenamen in PowerShell beginnen met een $ , zoals in $ Variable1 , en waarden worden toegewezen met behulp van = , zoals $ Variable1 = "Value 1". PowerShell ondersteunt een groot aantal variabeletypen; zoals tekstreeksen, gehele getallen, decimalen, matrices en zelfs geavanceerde typen zoals versienummers of IP-adressen.

Eenvoudige variabele

Alle variabelen in powershell beginnen met een Amerikaanse dollarteken ( $ ). Het eenvoudigste voorbeeld hiervan is:

$foo = "bar"

Deze instructie wijst een variabele toe met de naam foo met een tekenreekswaarde "bar".

Een variabele verwijderen

Om een variabele uit het geheugen te verwijderen, kan men de cmdlet Remove-Item . Opmerking: de variabelenaam bevat GEEN $ .

Remove-Item Variable:\foo

Variable heeft een provider waarmee de meeste * -item-cmdlets op dezelfde manier kunnen werken als bestandssystemen.

Een andere methode om de variabele te verwijderen, is het gebruik van de cmdlet Remove-Variable en zijn 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

strekking

De standaard scope een variabele is de omsluitende verpakking. Als het zich buiten een script of andere container bevindt, is het bereik Global . Om een bereik op te geven, wordt het voorafgegaan door de variabelenaam $scope:varname like so:

$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

Output:

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

Een CmdLet-uitvoer lezen

Standaard stuurt powershell de uitvoer terug naar de aanroepende entiteit. Beschouw het onderstaande voorbeeld,

Get-Process -Name excel   

Dit zou eenvoudigweg het lopende proces dat overeenkomt met de naam Excel, terugsturen naar de aanroepende entiteit. In dit geval de PowerShell-host. Het drukt zoiets af,

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

Als u nu de uitvoer toewijst aan een variabele, drukt deze gewoon niets af. En natuurlijk houdt de variabele de uitvoer vast. (Of het nu een string is, Object - Elk type wat dat betreft)

$allExcel = Get-Process -Name excel

Stel dat u een scenario hebt waarin u een variabele wilt toewijzen met een dynamische naam, u kunt de parameter -OutVariable

Get-Process -Name excel -OutVariable AllRunningExcel

Merk op dat de '$' hier ontbreekt. Een groot verschil tussen deze twee toewijzingen is dat het ook de uitvoer afdrukt, behalve deze toe te wijzen aan de variabele AllRunningExcel. U kunt er ook voor kiezen om het toe te wijzen aan een andere variabele.

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

Hoewel het bovenstaande scenario zeer zeldzaam is, hebben beide variabelen $ VarOne en $ VarTwo dezelfde waarde.

Overweeg dit nu,

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

De eerste instructie zou eenvoudig het excel-proces krijgen en toewijzen aan de variabele MSOFFICE, en vervolgens zou MS Word-processen actief worden en het aan de bestaande waarde van MSOFFICE toevoegen. Het zou er ongeveer zo uitzien,

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     

Lijsttoewijzing van meerdere variabelen

Powershell maakt meervoudige toewijzing van variabelen mogelijk en behandelt bijna alles als een array of lijst. Dit betekent dat in plaats van zoiets te doen:

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

U kunt dit eenvoudig doen:

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

Omdat Powershell toewijzingen op deze manier als lijsten behandelt, als de lijst meer waarden bevat dan items in uw lijst met variabelen waaraan ze worden toegewezen, wordt de laatste variabele een array van de resterende waarden. Dit betekent dat u dit soort dingen ook kunt doen:

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

arrays

Matrixdeclaratie in Powershell is bijna hetzelfde als het instantiëren van een andere variabele, dat wil zeggen dat u een $name = syntax gebruikt. De items in de array worden gedeclareerd door ze te scheiden door komma's ( , ):

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

Toevoegen aan een arry

Toevoegen aan een array is net zo eenvoudig als het gebruik van de operator + :

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

Arrays combineren

Nogmaals, dit is zo eenvoudig als het gebruik van de 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow