about_Operators

Rövid leírás

A PowerShell által támogatott operátorokat ismerteti.

Hosszú leírás

Az operátorok olyan nyelvi elemek, amelyeket parancsokban vagy kifejezésekben használhat. A PowerShell számos operátortípust támogat az értékek kezeléséhez.

Aritmetikai operátorok

Egy parancs vagy kifejezés értékeinek kiszámításához használjon számtani operátorokat (+, -, *, /, ). % Ezekkel az operátorokkal értékeket adhat hozzá, vonhat ki, szorozhat vagy oszthat meg, és kiszámíthatja az osztási művelet maradékát (modulusát).

Az összeadási operátor összefűzi az elemeket. A szorzási operátor az egyes elemek megadott számú példányát adja vissza. Aritmetikai operátorokat bármely olyan .NET-típuson használhat, amely implementálja őket, például: Int, , DateTimeString, , Hashtableés tömbök.

A bitenkénti operátorok (-band, -bor, -bxor, -bnot, -shl, ) -shraz értékek bitmintáit módosítják.

További információ: about_Arithmetic_Operators.

Hozzárendelési operátorok

A hozzárendelési operátorok (=, +=, -=, *=, /=, ) %=használatával értékeket rendelhet hozzá, módosíthat vagy fűzhet hozzá változókhoz. Az aritmetikai operátorokat hozzárendeléssel kombinálva hozzárendelheti az aritmetikai művelet eredményét egy változóhoz.

További információ: about_Assignment_Operators.

Összehasonlító operátorok

Az értékek és a tesztelési feltételek összehasonlításához használjon összehasonlító operátorokat (-eq-ne-gt, , -lt, , -le, ). -ge Összehasonlíthat például két sztringértéket annak megállapításához, hogy azok egyenlőek-e.

Az összehasonlító operátorok olyan operátorokat is tartalmaznak, amelyek mintázatokat keresnek vagy cserélnek le a szövegben. A (-match, , -replace-notmatch) operátorok reguláris kifejezéseket, a (-like, -notlike) pedig helyettesítő karaktereket használnak*.

Az elszigetelés-összehasonlító operátorok határozzák meg, hogy egy tesztérték megjelenik-e egy referenciakészletben (-in, -notin, , -contains). -notcontains

A típus-összehasonlító operátorok (-is, ) határozzák meg, -isnothogy egy objektum egy adott típusú-e.

További információ: about_Comparison_Operators.

Logikai operátorok

Logikai operátorok (-and, -or, -xor, -not, ) !használatával egyetlen összetett feltételes feltételhez kapcsolhatja a feltételes utasításokat. Logikai operátor használatával -and például létrehozhat két különböző feltétellel rendelkező objektumszűrőt.

További információ: about_Logical_Operators.

Átirányítási operátorok

Az átirányítási operátorok (>, , >>2>, 2>>, és 2>&1) használatával küldje el egy parancs vagy kifejezés kimenetét egy szövegfájlba. Az átirányítási operátorok a Out-File parancsmaghoz hasonlóan működnek (paraméterek nélkül), de lehetővé teszik a hibakimenet adott fájlokra való átirányítását is. A parancsmaggal is átirányíthatja a Tee-Object kimenetet.

További információ: about_Redirection

Operátorok felosztása és csatlakoztatása

Az -split és -join az operátorok osztják és kombinálják az alsztringeket. Az -split operátor részsztringekre oszt egy sztringet. Az -join operátor több sztringet egyetlen sztringbe fűz össze.

További információ: about_Split és about_Join.

Operátorok beírása

A típusoperátorok (-is, , -isnot) -ashasználatával megkeresheti vagy módosíthatja egy objektum .NET-keretrendszer típusát.

További információ: about_Type_Operators.

Unary operátorok

A unary ++ és -- az operátorok használatával növekményt vagy csökkenést, valamint - negálást. Ha például a változót $a a értékről 9 a értékre 10szeretné növelni, írja be a következőt $a++: .

További információ: about_Arithmetic_Operators.

Speciális operátorok

A speciális operátorok speciális használati eseteket használnak, amelyek nem férnek el más operátorcsoportokba. A speciális operátorok például lehetővé teszik a parancsok futtatását, egy érték adattípusának módosítását vagy az elemek tömbből való lekérését.

Csoportosítási operátor ( )

Más nyelvekhez hasonlóan a (...) operátorok prioritásának felülbírálására szolgál a kifejezésekben. Például: (1 + 2) / 3

A PowerShellben azonban további viselkedések is léteznek.

(...) lehetővé teszi, hogy egy parancs kimenete részt vegyen egy kifejezésben. Például:

PS> (Get-Item *.txt).Count -gt 10
True

Hozzárendelési utasítások csoportosítása

A nem csoportosított hozzárendelési utasítások nem kimenetértékek. Hozzárendelési utasítás csoportosításakor a hozzárendelt változó értéke át lesz adva , és nagyobb kifejezésekben is használható. Például:

PS> ($var = 1 + 2)
3
PS> ($var = 1 + 2) -eq 3
True

Az utasítás zárójelbe tördelése egy kifejezéssé alakítja, amely a értékét adja eredményül $var.

Ez a viselkedés az összes hozzárendelési operátorra vonatkozik, beleértve az összetett operátorokat, például +=a , és a növekményes (++) és a decrement (--) operátorokat. A növekmény és a csökkenés működési sorrendje azonban a pozíciójuktól függ.

PS> $i = 0
PS> (++$i) # prefix
1
PS> $i = 0
PS> ($i++) # postfix
0
PS> $i
1

Az előtag esetében az érték $i a kimenet előtt növekszik. A postfix-esetben az érték $i a kimenet után növekszik.

Ezt a technikát feltételes utasítás, például utasítás if kontextusában is használhatja.

if ($textFiles = Get-ChildItem *.txt) {
    $textFiles.Count
}

Ebben a példában, ha nincsenek egyező fájlok, a Get-ChildItem parancs semmit sem ad vissza, és nem rendel hozzá semmit$textFiles, amelyet logikai kontextusban tekintünk.$false Ha egy vagy több FileInfo-objektum van hozzárendelve a fájlhoz $textFiles, a feltételes érték a következő lesz: $true. A utasítás törzsében if lévő értékekkel $textFiles dolgozhat.

Megjegyzés

Bár ez a technika kényelmes és tömör, zavart okozhat a hozzárendelési operátor (=) és az egyenlőség-összehasonlító operátor (-eq) között.

Csőbe csoportosított kifejezések

Amikor egy folyamat első szegmenseként használják, a parancsok vagy kifejezések zárójelbe burkolása mindig a kifejezés eredményének számbavételét okozza. Ha a zárójelek körbefuttatnak egy parancsot, a rendszer a memóriában gyűjtött összes kimenettel befejeződik, mielőtt az eredményeket a folyamaton keresztül küldené el.

Alexpressziós operátor $( )

Egy vagy több utasítás eredményét adja vissza. Egyetlen eredmény esetén egy skaláris értéket ad vissza. Több eredmény esetén egy tömböt ad vissza. Ezt akkor használja, ha egy másik kifejezésen belüli kifejezést szeretne használni. Például a parancs eredményeinek beágyazása egy sztringkifejezésbe.

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

Tömb alexpressziós operátora @( )

Egy vagy több utasítás eredményét adja vissza tömbként. Az eredmény mindig 0 vagy több objektumból álló tömb.

PS> $list = @(Get-Process | Select-Object -First 10; Get-Service | Select-Object -First 10 )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
20
PS> $list = @(Get-Service | Where-Object Status -eq Starting )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
0

Kivonattábla literálszintaxisa @{}

A tömb alatti kifejezéshez hasonlóan ez a szintaxis a kivonattáblák deklarálásához használható. További információ: about_Hash_Tables.

Híváskezelő &

Parancsot, szkriptet vagy szkriptblokkot futtat. A hívási operátor, más néven az "invocation operátor" lehetővé teszi a változókban tárolt és sztringek vagy szkriptblokkok által képviselt parancsok futtatását. A híváskezelő gyermekhatókörben fut. További információ a hatókörökről: about_Scopes.

Ez a példa egy parancsot egy sztringben tárol, és a híváskezelővel hajtja végre.

PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned

A híváskezelő nem elemzi a sztringeket. Ez azt jelenti, hogy a híváskezelő használatakor nem használhat parancsparamétereket egy sztringen belül.

PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.

Az Invoke-Expression parancsmag képes olyan kódot futtatni, amely elemzési hibákat okoz a híváskezelő használatakor.

PS> & "1+1"
&: The term '1+1' is not recognized as a name of a cmdlet, function, script
file, or executable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.

PS> Invoke-Expression "1+1"
2

A híváskezelővel szkripteket futtathat a fájlnevükkel. Az alábbi példában egy szóközöket tartalmazó szkriptfájlnév látható. Amikor megpróbálja végrehajtani a szkriptet, a PowerShell ehelyett megjeleníti a fájlnevet tartalmazó idézett sztring tartalmát. A híváskezelő lehetővé teszi a fájlnevet tartalmazó sztring tartalmának végrehajtását.

PS C:\Scripts> Get-ChildItem

    Directory: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/28/2018   1:36 PM             58 script name with spaces.ps1

PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!

A szkriptblokkokról további információt a about_Script_Blocks című témakörben talál.

Háttér operátor &

A folyamatot a háttérben futtatja egy PowerShell-feladatban. Ez az operátor ugyanúgy működik, mint a UNIX vezérlő operátor ampersand (&), amely a parancsot aszinkron módon, alshellben futtatja feladatként.

Ez az operátor funkcionálisan egyenértékű a következőhöz Start-Job: . Alapértelmezés szerint a háttérművelet elindítja a feladatokat annak a hívónak az aktuális munkakönyvtárában, amely elindította a párhuzamos feladatokat. Az alábbi példa a háttérfeladat-operátor alapszintű használatát mutatja be.

Get-Process -Name pwsh &

Ez a parancs funkcionálisan egyenértékű a következő használatával Start-Job:

Start-Job -ScriptBlock {Get-Process -Name pwsh}

A háttér operátorhoz hasonlóan Start-Jobegy & objektumot Job ad vissza. Ez az objektum ugyanúgy használható a és Remove-Jobaz objektummalReceive-Job, Start-Job mint a feladat elindításához.

$job = Get-Process -Name pwsh &
Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Remove-Job $job

A & háttér operátor egy utasítás-terminátor is, ugyanúgy, mint a UNIX vezérlő operátor ampersand (&). Ez lehetővé teszi további parancsok meghívását a & háttéroperátor után. Az alábbi példa további parancsok meghívását mutatja be a & háttéroperátor után.

$job = Get-Process -Name pwsh & Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Ez egyenértékű a következő szkripttel:

$job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Receive-Job $job -Wait

Ha több parancsot szeretne futtatni, mindegyik a saját háttérfolyamatában, de mindegyik egy sorban van, egyszerűen helyezze & az egyes parancsok közé és mögé.

Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem &

További információ a PowerShell-feladatokról: about_Jobs.

Öntött operátor [ ]

Az objektumokat a megadott típusra konvertálja vagy korlátozza. Ha az objektumok nem konvertálhatók, a PowerShell hibát generál.

[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'

A leadást akkor is el lehet végezni, ha egy változót az öntött jelöléssel rendelnek hozzá.

Vessző operátor ,

Bináris operátorként a vessző létrehoz egy tömböt vagy hozzáfűzi a létrehozott tömböt. Kifejezés módban a vessző unary operátorként egy tömböt hoz létre egyetlen taggal. Helyezze a vesszőt a tag elé.

$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)

Mivel Write-Output argumentumot vár, zárójelbe kell tenni a kifejezést.

Dot sourcing operátor .

Futtat egy szkriptet az aktuális hatókörben, így a szkript által létrehozott függvények, aliasok és változók hozzá lesznek adva az aktuális hatókörhöz, felülírva a meglévőket. A szkript által deklarált paraméterek változókká válnak. Azok a paraméterek, amelyekhez nincs megadva érték, érték nélküli változókká válnak. Az automatikus változó $args azonban megmarad.

. c:\scripts\sample.ps1 1 2 -Also:3

Megjegyzés

A pont forráskezelőt szóköz követi. A szóköz használatával különbséget tehet a pont és az aktuális könyvtárat jelképező pont (.) szimbólum között.

Az alábbi példában az aktuális könyvtárban található Sample.ps1 szkript az aktuális hatókörben fut.

. .\sample.ps1

Formátum operátor -f

Sztringeket formázhat a sztringobjektumok formátummetódusával. Adja meg az operátor bal oldalán található formátumsztringet és az operátor jobb oldalán formázandó objektumokat.

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

A számértékeket nullázhatja a "0" egyéni kijelölővel. A következő : nullák száma jelzi a formázott sztring maximális szélességét.

"{0:00} {1:000} {2:000000}" -f 7, 24, 365
07 024 000365

Ha meg kell tartania a kapcsos zárójeleket ({}) a formázott sztringben, a kapcsos zárójelek duplálásával kimenekítheti őket.

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

További információ: String.Format metódus és összetett formázás.

Index operátor [ ]

Objektumokat jelöl ki az indexelt gyűjteményekből, például tömbökből és kivonattáblákból. A tömbindexek nulla alapúak, ezért az első objektum indexelése [0]. Negatív indexekkel is lekérheti az utolsó értékeket. A kivonattáblák kulcsérték szerint vannak indexelve.

Az indexek listája alapján az index operátora az indexeknek megfelelő tagok listáját adja vissza.

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
PS> $a[2, 1, 0]
3
2
1
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

Ha egy objektum nem indexelt gyűjtemény, az index operátorral az első elemhez való hozzáféréssel magát az objektumot adja vissza. Az első elemen túli indexértékek visszaadják a következőt $null: .

PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True

Folyamatkezelő |

Az azt megelőző parancs kimenetét ("csövek") küldi el az azt követő parancsnak. Ha a kimenet egynél több objektumot (gyűjteményt) tartalmaz, a folyamatüzemeltető egyenként küldi el az objektumokat.

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

Folyamatlánc-operátorok && és ||

Feltételesen hajtsa végre a jobb oldali folyamatot a bal oldali folyamat sikeressége alapján.

# If Get-Process successfully finds a process called notepad,
# Stop-Process -Name notepad is called
Get-Process notepad && Stop-Process -Name notepad
# If npm install fails, the node_modules directory is removed
npm install || Remove-Item -Recurse ./node_modules

További információ: About_Pipeline_Chain_Operators.

Tartomány operátora ..

A tartományoperátor szekvenciális egész számok vagy karakterek tömbjének ábrázolására használható. A tartományoperátor által csatlakoztatott értékek határozzák meg a tartomány kezdő és záró értékeit.

Megjegyzés

A karaktertartományok támogatása a PowerShell 6-ban lett hozzáadva.

1..10
$max = 10
foreach ($a in 1..$max) {Write-Host $a}

A tartományokat fordított sorrendben is létrehozhatja.

10..1
5..-5 | ForEach-Object {Write-Output $_}

Ha karaktertartományt szeretne létrehozni, a karaktereket idézőjelek közé kell tenni.

PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A

Ha egy karaktertartományt egy sztringhez rendel, az ugyanúgy lesz kezelve, mint egy karaktertömb sztringhez való hozzárendelése.

PS> [string]$s = 'a'..'e'
$s
a b c d e
$a = 'a', 'b', 'c', 'd', 'e'
$a
a b c d e

A tömbben lévő karakterek egy sztringbe vannak illesztve. A karaktereket a beállítási változó értéke választja $OFS el egymástól. További információ: about_Preference_Variables.

A tömbben lévő karakterek sorrendjét a karakter ASCII-értéke határozza meg. Az ASCII értéke cX például 99, illetve 88. Ez a tartomány fordított sorrendben jelenik meg.

PS> 'c'..'X'
c
b
a
`
_
^
]
\
[
Z
Y
X

A tartomány kezdő és záró értékei lehetnek olyan kifejezéspárok, amelyek egész számra vagy karakterre értékelnek. Használhatja például egy enumerálás tagjait a kezdő és a záró értékhez.

PS> enum Food {
      Apple
      Banana = 3
      Kiwi = 10
    }
PS> [Food]::Apple..[Food]::Kiwi
0
1
2
3
4
5
6
7
8
9
10

Fontos

Az eredményként kapott tartomány nem korlátozódik az enumerálás értékeire. Ehelyett a két megadott érték közötti értéktartományt jelöli. A tartomány operátorával nem jelölheti megbízhatóan az enumerálás tagjait.

Taghozzáférés-operátor .

Hozzáfér egy objektum tulajdonságaihoz és metódusaihoz. A tag neve kifejezés lehet.

$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }

A PowerShell 3.0-s verziójától kezdődően, ha az operátort olyan listagyűjtemény-objektumon használja, amely nem rendelkezik tagmal, a PowerShell automatikusan számba veszi a gyűjtemény elemeit, és mindegyiken az operátort használja. További információ: about_Member-Access_Enumeration.

Statikus tag operátora ::

Meghívja egy .NET-keretrendszer osztály statikus tulajdonságait és metódusait. Egy objektum statikus tulajdonságainak és metódusainak megkereséséhez használja a Get-Member parancsmag Statikus paraméterét. A tag neve kifejezés lehet.

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

Ternáris operátor ? <if-true> : <if-false>

Egyszerű feltételes esetekben a ternáris operátort használhatja a if-else utasítás helyettesítésére.

További információ: about_If.

Null-szénerősítési operátor ??

A null-coalescing operátor ?? a bal oldali operandus értékét adja vissza, ha nem null értékű. Ellenkező esetben kiértékeli a jobb oldali operandust, és visszaadja az eredményét. Az ?? operátor nem értékeli ki a jobb oldali operandust, ha a bal oldali operandus értéke nem null.

$x = $null
$x ?? 100
100

Az alábbi példában a jobb oldali operandus nem lesz kiértékelve.

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Null-koszesszenzálás-hozzárendelési operátor ??=

A null-koszesszenzálás-hozzárendelési operátor ??= csak akkor rendeli hozzá a jobb oldali operandus értékét a bal oldali operandushoz, ha a bal oldali operandus null értéket ad vissza. Az ??= operátor nem értékeli ki a jobb oldali operandust, ha a bal oldali operandus értéke nem null.

$x = $null
$x ??= 100
$x
100

Az alábbi példában a jobb oldali operandus nem lesz kiértékelve.

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Null feltételes operátorok ?. és ?[]

Megjegyzés

Ezt a funkciót a powershell 7.1-ben a kísérletiről a mainstreamre helyeztük át.

A null feltételes operátor csak akkor alkalmaz taghozzáférést, ?.vagy elemhozzáférést, ?[]műveletet az operandusára, ha az operandus nem null értékű; ellenkező esetben null értéket ad vissza.

Mivel a PowerShell lehetővé teszi ? , hogy a változónév része legyen, a változó nevének formális specifikációja szükséges az operátorok használatához. Kapcsos zárójeleket ({}) kell használnia a változónevek körül, például ${a} vagy amikor ? a változónév ${a?}része.

Megjegyzés

A változónév szintaxisa ${<name>} nem tévesztendő össze az $() alexpressziós operátorral. További információt a about_Variables Változónév szakaszában talál.

A következő példában a PropName érték lesz visszaadva.

$a = @{ PropName = 100 }
${a}?.PropName
100

Az alábbi példa null értéket ad vissza a PropName tagnév elérése nélkül.

$a = $null
${a}?.PropName

Ebben a példában az indexelt elem értéke lesz visszaadva.

$a = 1..10
${a}?[0]
1

Az alábbi példa null értéket ad vissza az indexelt elem elérése nélkül.

$a = $null
${a}?[0]

Lásd még