Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
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. Bármely olyan .NET típushoz használhat számtani operátorokat, amelyek implementálják őket, például: Int, String, DateTime, Hashtable és Tömbök.
A bitenkénti operátorok (, , , , , ) az értékek bitmintáit módosítják.
További információ: about_Arithmetic_Operators.
Értékadó operátorok
A hozzárendelési operátorok (, , , , , ) használatával értékeket rendelhet, 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átorok (, , , , , ) használatával ö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 (, , ) operátorok reguláris kifejezéseket használnak, a (, ) pedig helyettesítő karaktereket.
Az elszigetelés-összehasonlító operátorok meghatározzák, hogy egy tesztérték megjelenik-e egy referenciakészletben (, , , ).
A típus-összehasonlító operátorok (, ) határozzák meg, hogy egy objektum adott típusú-e.
További információ: about_Comparison_Operators.
Logikai operátorok
Logikai operátorok (, , , , ) használatával egyetlen összetett feltételes feltételhez kapcsolhatja a feltételes utasításokat. Egy logikai operátor használatával például létrehozhat egy 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 (, , , és ) 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 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 kimenet átirányításához a parancsmagot is használhatja.
További információ: about_Redirection
Operátorok felosztása és csatlakoztatása
A és operátorok osztják és egyesítik az alsztringeket. A operátor részsztringekre oszt egy sztringet. A operátor több sztringet fűz egyetlen sztringbe.
További információ: about_Split és about_Join.
Típus operátorok
A típusoperátorok (-is, -isnot, -as) használatával megkeresheti vagy módosíthatja az objektum .NET típusát.
További információ: about_Type_Operators.
Unary operátorok
A unary és operátorokkal növekményes vagy csökkenő értékeket, valamint negáláshoz. Ha például a változót -ról -ra szeretné növelni, írja be 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 a kifejezések operátori elsőbbséget is felülbírálják. Például:
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
Csoportosított kifejezések csővel
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.
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.
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éldául:
PS> ($var = 1 + 2)
3
PS> ($var = 1 + 2) -eq 3
True
Az utasítás zárójelben való körbefuttatása olyan kifejezéssé alakítja, amely a értékét adja ki.
Ez a viselkedés az összes hozzárendelési operátorra vonatkozik, beleértve az összetett operátorokat, például a , valamint 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 a értéke a kimenet előtt növekszik. A postfix-esetben a értéke a kimenet után növekszik.
Ezt a technikát egy feltételes utasítás, például az 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 parancs semmit sem ad vissza, és semmit sem rendel hozzá , amely logikai környezetben . Ha egy vagy több FileInfo-objektum van hozzárendelve , a feltételes kiértékelés eredménye a következő lesz : . A utasítás törzsében használhatja a értékét.
Note
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 () között.
Subexpression 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 subexpression operátor
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.
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.
PS> Invoke-Expression "1+1"
2
A szkriptet a fájlnév használatával hajthatja végre. Egy szkriptfájlnak fájlkiterjesztéssel kell rendelkeznie, hogy végrehajtható legyen. 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 talál.
Háttér operátor
Futtatja a folyamatot a háttérben, egy PowerShell-feladatban. Ez az operátor hasonlóan 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 . A háttérművelet alapértelmezés szerint 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 alábbi használatával:
Start-Job -ScriptBlock {Get-Process -Name pwsh}
A háttér operátor a -hez hasonlóan egy objektumot ad vissza. Ez az objektum és is használható, mintha használta volna 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 is egy utasítás-terminátor, csakúgy, mint a Unix vezérlő operátor ampersand (). Ez lehetővé teszi további parancsok meghívását a háttér operátor után. Az alábbi példa további parancsok meghívását mutatja be a háttér operá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
Á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 argumentumot vár, zárójelben kell megadnia 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ó azonban megmarad.
. C:\scripts\sample.ps1 1 2 -Also:3
Note
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
Hozzáférés biztosítása az .NET összetett formázási funkcióhoz. Az összetett formázási sztringek olyan rögzített szövegből állnak, amely indexelt helyőrzőkkel, úgynevezett formátumelemekkel van elegyítve. Ezek a formátumelemek a listában szereplő objektumoknak felelnek meg.
Minden formázási elem a következő űrlapot veszi fel, és a következő összetevőkből áll:
{index[,alignment][:formatString]}
A megfelelő kapcsos zárójelek ( és ) megadása kötelező.
A formázási művelet olyan eredménysztringet eredményez, amely az eredeti rögzített szövegből áll, amely a lista objektumainak sztringképével van elegyítve. További információ: Összetett formázás.
Adja meg az összetett formázási sztringet az operátor bal oldalán, valamint 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. A követő 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 zárójelek megduplázásával elkerülheti őket.
"{0} vs. {{0}}" -f 'foo'
foo vs. {0}
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ő objektum indexelése . 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 ad vissza.
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átor
A tartomány operátora szekvenciális egész számok vagy karakterek 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.
Note
A Karaktertartományok támogatása a PowerShell 6-ban lett hozzáadva.
Számtartományok
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á () 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 . Ez egy tömb maximális mérete .NET.
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
Important
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.
Karaktertartományok
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öt egy sztringhez.
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 sztringbe vannak illesztve. A karaktereket a beállítási változó értéke választja el egymástól. További információ a about_Preference_Variablescímű részben található.
A tömbben lévő karakterek sorrendjét a karakter ASCII-értéke határozza meg. A és a ASCII-értéke például 99, illetve 88. Ez a tartomány fordított sorrendben jelenik meg.
PS> 'c'..'X'
c
b
a
`
_
^
]
\
[
Z
Y
X
Taghozzáférés-kezelő
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.
Ha a taghozzáférési operátorral olvas be egy nem létező tulajdonságot, vagy ha egy tulajdonságbeolvasó metódus kivételt okoz, a PowerShell hiba dobása helyett ad vissza . Ez a viselkedés a tulajdonsághozzáférésre jellemző. Ez a viselkedés .NET CA-szabályt CA1065 követi, amely a következőket állítja be:
A tulajdonságok alapvetően intelligens mezők. Ezért a lehető legnagyobb mértékben úgy kell viselkedniük, mint egy mező. A mezők nem adnak kivételt, és a tulajdonságoknak sem kell. Ha olyan tulajdonsága van, amely kivételt jelez, fontolja meg módszerként.
A metódushívások (beleértve a mögöttes metódus közvetlen meghívását) által alkalmazott kivételeket nem tiltja le a rendszer.
Statikus tag operátor
Meghívja egy .NET osztály statikus tulajdonságait és metódusait. Egy objektum statikus tulajdonságainak és metódusainak megkereséséhez használja a parancsmag Statikus paraméterét. A tag neve lehet kifejezés.
[datetime]::Now
'MinValue', 'MaxValue' | ForEach-Object { [int]:: $_ }
Ternáris operátor
Egyszerű feltételes esetekben a ternáris operátort használhatja a utasítás helyettesítésére.
További információ: about_If.
Null-szenesítési operátor
A null-szenesítési 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. A operátor nem értékeli ki a jobb oldali operandusát, 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-szenesítés-hozzárendelés operátora
A null-szenesítés hozzárendelési operátor a jobb oldali operandus értékét csak akkor rendeli hozzá a bal oldali operandushoz, ha a bal oldali operandus null értékű. A operátor nem értékeli ki a jobb oldali operandusát, 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()
$todaysDate
1/10/2020
Null feltételes operátorok és
Note
Ezt a funkciót a PowerShell 7.1-ben a kísérleti verzióró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 operandusra, ha az operandus nem null értékű; ellenkező esetben null értéket ad vissza.
Mivel a PowerShell lehetővé teszi, hogy része legyen a változó nevének, a változónév formális specifikációja szükséges ezen operátorok használatához. Kapcsos zárójeleket () kell használnia az olyan változónevek köré, mint a , vagy ha a változónév része.
Note
A változónévszintaxisát nem szabad összekeverni a alexpressziós operátorral. További információt a about_Variables Változónév szakaszában talál.
Az alábbi példában a PropName értéke 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
- about_Arithmetic_Operators
- about_Assignment_Operators
- about_Comparison_Operators
- about_Logical_Operators
- about_Operator_Precedence
- about_Member-Access_Enumeration
- about_Type_Operators
- about_Split
- about_Join
- about_Redirection