about_Operators

Rövid leírás

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

Hosszú leírás

Az operátor egy olyan nyelvi elem, amelyet egy parancsban vagy kifejezésben használhat. A PowerShell többféle operátort támogat az értékek kezeléséhez.

Aritmetikai operátorok

A parancsok vagy kifejezések é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 el, és kiszámíthatja az osztási műveletek maradékát (modulusát).

Az összeadás operátor összefűzi az elemeket. A szorzási operátor az egyes elemek példányainak megadott számát adja vissza. Aritmetikai operátorokat bármilyen .NET-típuson használhat, 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, ) -shrmódosítják az értékek bitmintáit.

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, ) -gehasonlítsa össze 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, a (-like, -notlike) pedig helyettesítő karaktereket használnak*.

Az elszigetelési ö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

Használjon logikai operátorokat (-and, -or, -xor, -not, ) !a feltételes utasítások egyetlen összetett feltételes összekapcsolásához. 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

Á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 Tee-Object is átirányíthatja a kimenetet.

További információ: about_Redirection

Operátorok felosztása és csatlakoztatása

Az -split és -join operátorok osztják és kombinálják a részkarakterláncokat. Az -split operátor sztringrészekre osztja fel a sztringeket. Az -join operátor több sztringet egyetlen sztringgé fűz össze.

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

Típusoperátorok

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 unáris ++ és -- az operátorokkal növekményt vagy csökkenést, illetve - negálást alkalmazhat. Ha például a változót $a értékről 9 é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 bele más operátorcsoportokba. A speciális operátorokkal például parancsokat futtathat, módosíthatja egy érték adattípusát, vagy lekérheti az elemeket egy tömbből.

Csoportosítási operátor ( )

Más nyelvekhez hasonlóan a (...) operátorok elsőbbségét is felülbírálja a kifejezésekben. Például: (1 + 2) / 3

A PowerShellben azonban további viselkedések is vannak.

(...) 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 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 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 olyan 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ő működés sorrendje azonban a helyzetüktő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éke $i a kimenet előtt növekszik. A postfix esetben az értéke $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 nincs egyező fájl, 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, $textFilesa feltételes kiértékelése a következő lesz: $true. A értékét $textFiles az utasítás törzsében használhatja if .

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.

Piping grouped expressions

Ha egy folyamat első szegmenseként használják, a parancsok vagy kifejezések zárójelbe tördelése mindig a kifejezés eredményének enumerálását eredményezi. 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 elküldené a folyamaton keresztül.

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ásához 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 alkifejezéséhez 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 "hí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ő 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ási operátorral 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ási operátor 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 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.

PS> Invoke-Expression "1+1"
2

A hívási operátorral szkripteket hajthat végre a fájlnevükkel. Az alábbi példa egy szóközöket tartalmazó szkriptfájlnevet mutat be. 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ási operátor 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éroperátor &

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

Ez az operátor funkcionálisan egyenértékű a operátorral Start-Job. Alapértelmezés szerint a háttéroperátor a párhuzamos feladatokat kezdeményező hívó aktuális munkakönyvtárában indítja el a 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éroperátorhoz hasonlóan Start-Joba & függvény egy objektumot Job ad vissza. Ez az objektum ugyanúgy használható a és Remove-Joba 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éroperátor is egy utasítás-terminátor, csakúgy, mint a UNIX vezérlő operátor és (&). 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, mindegyiket a saját háttérfolyamatában, de mindegyik egy sorban, egyszerűen helyezze & el az egyes parancsok között és után.

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 [ ]

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

Az áttűnést akkor is el lehet végezni, ha egy változót hozzárendelnek az öntött jelölés használatával.

Vessző operátor ,

Bináris operátorként a vessző létrehoz egy tömböt vagy hozzáfűzi a létrehozandó tömböt. Kifejezés módban a vessző egy egyetlen taggal rendelkező tömböt hoz létre unáris operátorként. 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á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

Megjegyzés

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

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áz 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ára állíthatja a "0" egyéni kijelölővel. A következő : nullák száma azt a maximális szélességet jelzi, amelybe a formázott sztringet be szeretné tenni.

"{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 feloldhatja őket.

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

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

Indexoperá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ő objektum indexelése [0]így történik: . 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 indexoperátor 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 első elem elérésére használt indexoperátor maga az objektumot adja vissza. Az első elemen túli indexértékek a következőt adják vissza $null: .

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

Folyamatoperátor |

A parancs kimenetét ("csövek") küldi el az azt megelőző parancsnak az azt követő parancsnak. Ha a kimenet egynél több objektumot (gyűjteményt) tartalmaz, a folyamatoperátor 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ányoperátor ..

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 összekapcsolt é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 $_}

Karaktertartomány létrehozásához 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, a rendszer ugyanúgy kezeli, mint egy karaktertömb sztringhez rendelését.

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 jelenne 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ámként vagy karakterként értékelhetők ki. 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ányoperátor nem használható megbízhatóan egy enumerálás tagjainak ábrázolására.

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

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

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

A PowerShell 3.0-s verziójától kezdve, ha az operátort egy 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 lehet egy kifejezés.

[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. Ellenkező esetben kiértékeli a jobb oldali operandust, és visszaadja annak eredményét. Az ?? operátor nem értékeli ki a jobb oldali operandust, ha a bal oldali operandus nem null értékű.

$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-coalescing hozzárendelési operátor ??=

A null-coalescing 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 nem null értékű.

$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 kísérletiről általánosra helyeztük át.

A null feltételes operátor csak akkor alkalmaz taghozzáférést, ?.vagy elemhozzáférést az operandusra, ?[]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 ezeknek az operátoroknak a 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évszintaxisát ${<name>} nem szabad összekeverni 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 anélkül, hogy megpróbálná elérni a PropName tagnevet.

$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 anélkül, hogy megpróbálná elérni az indexelt elemet.

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

Lásd még