Megosztás a következőn keresztül:


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.

Számtani operátorok

A parancsok vagy kifejezések értékeinek kiszámításához használjon számtani operátorokat (+, -, *, /, ), %. Ezekkel az operátorokkal hozzáadhat, kivonhat, szorozhat vagy oszthat értékeket, és kiszámíthatja az osztási művelet fennmaradó részé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. Az aritmetikai operátorokat bármely olyan .NET-típuson használhatja, amely implementálja őket, például: Int, , String, DateTime, 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átorokkal (=, , +=-=, *=, /=, ) %=é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

Összehasonlító operátorokkal (-eq, , -gt-ne, -lt, -le, ) -geösszehasonlíthatja az értékeket és a tesztelési feltételeket. Ö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, (-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 feltételes utasításokat csatlakoztathat egyetlen összetett feltételes feltételhez. Logikai operátor használatával -and például létrehozhat egy objektumszűrőt két különböző feltétellel.

További információ: about_Logical_Operators.

Átirányítási operátorok

Á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 sztringeket oszt fel részsztringekre. Az -join operátor több sztringet fűz egyetlen sztringbe.

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

Típus operátorok

Az objektum .NET-típusának megkereséséhez vagy módosításához használja a típusoperátorok (-is, -isnot, ) -ashasználatát.

További információ: about_Type_Operators.

Unary operátorok

A unary ++ és -- az operátorok használatával növekményes vagy csökkenő értékeket és - negációt használhat. Ha például a változót $a910a következőre szeretné 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 esetekkel rendelkeznek, amelyek nem férnek bele más operátorcsoportokba. A speciális operátorok például lehetővé teszik a parancsok futtatását, az é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 (...) kifejezések operátori elsőbbséget is felülírja. Például: (1 + 2) / 3

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

Eredménykifejezések csoportosítása

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

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

Feljegyzés

Ha zárójelben körbefuttat egy parancsot, az automatikus változót $? akkor is beállítja $true, ha maga a zárt parancs van beállítva $?$false. Például (Get-Item /Nosuch); $? váratlanul igaz értéket ad. További információ: $?about_Automatic_Variables.

Piping grouped expressions

Ha egy folyamat első szegmenseként használják, a parancsok vagy kifejezések zárójelben való körbefuttatá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 összegyűjtött összes kimenettel befejeződik, mielőtt az eredményeket a folyamaton keresztül küldené el.

Az utasítások kimenetei például eltérőek:

PS> ConvertFrom-Json '["a", "b"]'   | ForEach-Object { "The value is '$_'" }

The value is 'a b'

PS> (ConvertFrom-Json '["a", "b"]') | ForEach-Object { "The value is '$_'" }

The value is 'a'
The value is 'b'

A kifejezések pipálás előtti csoportosítása azt is biztosítja, hogy az objektumonkénti feldolgozás ne zavarja a parancs kimenetének előállításához használt számbavételt.

Ha például a kimenetet Get-ChildItem úgy szeretné beszkenni, hogy Rename-Item az nem várt következményeket okozhat, amikor egy elemet átneveznek, majd újra felfedezik, és másodszor átnevezik.

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

A nem csoportosított hozzárendelési utasítások nem eredményeznek kimeneti értékeket. 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élda:

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

Az utasítás zárójelben való körbefuttatása egy olyan kifejezéssé alakítja, amely a függvény értékét $varadja ki.

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 dekrement műveletének 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 egy feltételes utasítás, például az if utasítás 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, amely logikai kontextusban tekinthető.$false Ha egy vagy több FileInfo-objektum van hozzárendelve $textFiles, a feltételes kiértékelés eredménye a következő lesz $true: . Az utasítás törzsének $textFilesif értékével dolgozhat.

Feljegyzé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.

Alexpressziós operátor $( )

Egy vagy több utasítás eredményét adja vissza. Egyetlen eredmény esetén skalárt 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ális szintaxisa @{}

A tömb alexpresszióhoz hasonlóan ez a szintaxis egy kivonattáblát deklarál. 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 meghívási 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ő egy gyermekhatókörben fut. További információ a hatókörökről: about_Scopes. Ezzel létrehozhatja a szükséges parancsokat, paramétereket és argumentumokat tartalmazó sztringeket, majd meghívhatja a sztringet úgy, mintha parancs lenne. A létrehozott sztringeknek ugyanazokat az elemzési szabályokat kell követnie, mint a parancssorba beírt parancsoknak. További információ: about_Parsing.

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.
At line:1 char:2
+ & $c
+  ~~
    + CategoryInfo          : ObjectNotFound: (Get-Service -Name Spooler:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Az Invoke-Expression parancsmag olyan kódot képes végrehajtani, 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.
At line:1 char:2
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

A szkriptet a fájlnév használatával hajthatja végre. Egy szkriptfájlnak végrehajtható fájlkiterjesztéssel kell rendelkeznie .ps1 . Az elérési útjukban szóközöket tartalmazó fájlokat idézőjelek közé kell tenni. Ha megpróbálja végrehajtani az idézett elérési utat, a PowerShell a szkript futtatása helyett megjeleníti az 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.

Öntött operátor [ ]

Átalakítja vagy korlátozza az objektumokat a megadott típusra. Ha az objektumok nem konvertálhatók, a PowerShell hibát okoz.

[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 hozzárendelnek az öntvény jelöléséhez.

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 létrehoz egy tömböt 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ójelben kell elhelyeznie 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áadódnak 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 érték megadva, é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

Feljegyzés

A pont-forrás operátort szóköz követi. A szóköz használatával megkülönböztethető a pont az aktuális könyvtárat jelképező pont (.) szimbólumtól.

Az alábbi példában az aktuális könyvtár Sample.ps1 szkriptje az aktuális hatókörben fut.

. .\sample.ps1

Formátum operátor -f

Sztringek formázása a sztringobjektumok formátummetódusával. Adja meg az operátor bal oldalán található formázási sztringet é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ára állíthatja a "0" egyéni azonosítóval. Az alábbi : nullák száma a formázott sztring maximális szélességét jelzi.

"{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 kapcsos kapcsos zárójelek duplálásával elkerülheti ő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 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ő objektumot a rendszer a következőképpen indexeli [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 $nullaz értéket.

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'}

Tartomány operátora ..

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

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 $_}

A tartomány kezdő és záró értékei lehetnek olyan kifejezéspárok, amelyek egész számként vagy karakterként értékelnek ki. A tartomány végpontjainak aláírt 32 bites egész számokká ([int32]) kell konvertálhatóknak lenniük. A nagyobb értékek hibát okoznak. Ha a tartomány egy tömbben van rögzítve, az eredményként kapott tömb mérete a (vagy256mb - 8) értékre korlátozódik 268435448 . Ez egy tömb maximális mérete .NET-keretrendszer.

Használhatja például az enumerálás tagjait a kezdő és a végértékekhez.

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átorral nem jelölheti megbízhatóan az enumerálás tagjait.

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

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

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

A PowerShell 3.0-tól kezdve, amikor 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 használja az operátort. További információ: about_Member-Access_Enumeration.

Statikus tag operátor ::

Meghívja a .NET-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 lehet kifejezés.

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

Lásd még