Sök…


Introduktion

Variabler används för att lagra värden. Låt värdet vara av vilken typ som helst, vi måste lagra det någonstans så att vi kan använda det i hela konsolen / skriptet. Variabla namn i PowerShell börjar med en $ , som i $ Variable1 , och värden tilldelas med = , liksom $ Variable1 = "Value 1". PowerShell stöder ett stort antal variabeltyper; till exempel textsträngar, heltal, decimaler, matriser och till och med avancerade typer som versionnummer eller IP-adresser.

Enkel variabel

Alla variabler i powershell börjar med ett US-tecken ( $ ). Det enklaste exemplet på detta är:

$foo = "bar"

Detta uttalande tilldelar en variabel som heter foo med ett strängvärde "bar".

Ta bort en variabel

För att ta bort en variabel från minnet kan man använda cmdleten Remove-Item objekt. Obs: Variabelns namn inkluderar INTE $ .

Remove-Item Variable:\foo

Variable har en leverantör som tillåter de flesta * -emem-cmdlets att fungera som filsystem.

En annan metod för att ta bort variabel är att använda Remove-Variable cmdlet och dess 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

Omfattning

Standard utrymme för en variabel är den omslutande behållare. Om utanför ett skript, eller annan behållare, är omfattningen Global . För att ange en räckvidd förhindras den till variabelnamnet $scope:varname som så:

$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

Produktion:

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

Läser en CmdLet-utgång

Som standard returnerar powershell utdata till den uppringande enheten. Tänk nedan exempel,

Get-Process -Name excel   

Detta skulle helt enkelt, returnera den löpande processen som matchar namnet excel, till den uppringande enheten. I detta fall PowerShell-värden. Det skriver ut något liknande,

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

Om du nu tilldelar utskriften till en variabel kommer den helt enkelt inte att skriva ut någonting. Och naturligtvis har variabeln utmatningen. (Var det en sträng, Objekt - Vilken typ som helst för den delen)

$allExcel = Get-Process -Name excel

Så låt oss säga att du har ett scenario där du vill tilldela en variabel med ett dynamiskt namn, du kan använda -OutVariable parametern

Get-Process -Name excel -OutVariable AllRunningExcel

Observera att '$' saknas här. En stor skillnad mellan dessa två uppdrag är att den också skriver ut utöver att tilldela den till variabeln AllRunningExcel. Du kan också välja att tilldela den till en annan variabel.

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

Men ovanstående scenario är mycket sällsynt, båda variablerna $ VarOne och $ VarTwo kommer att ha samma värde.

Tänk nu på detta,

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

Det första uttalandet skulle helt enkelt få excel-processen och tilldela den till MSOFFICE-variabeln, och nästa skulle få MS-ordprocesser att köra och "Bifoga" det till det befintliga värdet på MSOFFICE. Det skulle se ut så här,

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     

Lista tilldelning av flera variabler

Powershell tillåter flera tilldelning av variabler och behandlar nästan allt som en matris eller en lista. Detta betyder att istället för att göra något liknande:

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

Du kan helt enkelt göra detta:

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

Eftersom Powershell behandlar uppdrag på detta sätt som listor, om det finns fler värden i listan än objekt i din lista med variabler att tilldela dem, blir den sista variabeln en matris med de återstående värdena. Detta betyder att du också kan göra saker som detta:

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

arrayer

Arraydeklaration i Powershell är nästan densamma som att instansera någon annan variabel, dvs att du använder en $name = syntax. Objekten i arrayen deklareras genom att separera dem med komma ( , ):

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

Lägger till en arry

Att lägga till en matris är lika enkelt som att använda operatören + :

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

Kombinera matriser tillsammans

Återigen är detta lika enkelt som att använda + -operatören

$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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow