about_Operators

Rövid leírás

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

Hosszú leírás

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

Aritmetikai operátorok

Aritmetikai operátorok (+, , -*, /, ) %használatával kiszámíthatja egy parancs vagy kifejezés értékeit. Ezekkel az operátorokkal értékeket adhat hozzá, vonhat ki, szorozhat vagy oszthat, és kiszámíthatja az osztási művelet maradékát (modulusát).

Az összeadás 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, ) -shrmódosítják az értékek bitmintáit.

További információ: about_Arithmetic_Operators.

Hozzárendelési operátorok

A hozzárendelő 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

Összehasonlító operátorok (-eq, , -gt-ne, -lt, -le, ) -gehaszná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 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é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

Logikai operátorok (-and, , -xor-or, -not, ) !használatával feltételes utasításokat kapcsolhat össze egyetlen összetett feltételes utasítással. Logikai operátor használatával -and 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

Á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

Felosztási és illesztő operátorok

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

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

Típusoperátorok

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

További információ: about_Type_Operators.

Unáris operátorok

A unáris ++ és -- az operátorok használatával növekményes vagy csökkenő értékeket adhat meg, illetve - negálást is alkalmazhat. 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 eseteket használnak, amelyek nem illeszkednek 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 (...) kifejezések operátori elsőbbségének felülbírálására szolgál. Például: (1 + 2) / 3

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

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

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • Ha egy folyamat első szegmenseként használják, a parancsok vagy kifejezések zárójelekbe 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.

Alkifejezé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. Akkor használja ezt a lehetőséget, 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 alkifejezési 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 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, 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.

Ez a példa egy parancsot tárol egy sztringben, és a hívó 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ó 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 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
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

A hívási operátorral szkripteket hajthat végre 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ézőjeles 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!

További információ a szkriptblokkokról: about_Script_Blocks.

Háttéroperátor &

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

Ez az operátor funkcionálisan egyenértékű a Start-Job. Alapértelmezés szerint a háttéroperátor a párhuzamos tevékenységeket elindító 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álattal Start-Job:

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

A háttéroperátorhoz hasonlóan Start-Jobegy & objektumot Job is visszaad. Ez az objektum ugyanúgy használható, Receive-JobRemove-Jobmint Start-Job 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-lezáró, 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 mindegyiket 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 generál.

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

A leadott adatok akkor is végrehajthatók, ha egy változót hozzárendelnek az öntött jelöléssel.

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ő unáris operátorként egyetlen taggal rendelkező tömböt hoz létre. 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 megadnia a kifejezést.

Dot sourcing operátor .

Futtat egy szkriptet az aktuális hatókörben, hogy a szkript által létrehozott függvények, aliasok és változók hozzá legyenek 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ás operátort szóköz követi. Használja a szóközt a pont és az aktuális könyvtárat jelölő pont (.) szimbólum megkülönböztetéséhez.

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á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 numerikus értékeket nullára állíthatja a "0" egyéni kijelölővel. Az alábbi : nullák száma azt jelzi, hogy a formázott sztringet legfeljebb hány szélességre lehet beszúrni.

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

Ha meg kell őriznie a kapcsos zárójeleket ({}) a formázott sztringben, a 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.

Indexoperá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ő 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 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, akkor az első elem eléréséhez az indexoperátor használatával magát az objektumot adja vissza. Az első elemen túli indexértékek visszaadása $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 folyamatkezelő 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 szekvenciális egész számokat jelöli egy egész tömbben, egy felső és egy alsó határt megadva.

1..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 PowerShell 6-tól kezdve a tartományoperátor karaktereket és egész számokat is használ.

Karaktertartomány létrehozásához foglalja idézőjelek közé a határkaraktereket.

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

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-s verziójától kezdve, ha az operátort olyan listagyűjtemény-objektumon használja, amely nem rendelkezik taggal, 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 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 az if-else utasítás helyettesítésére.

További információ: about_If.

Null-coalescing operátor ??

A null-coalescing operátor ?? a bal oldali operandus értékét adja vissza, ha az 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 operandusát, 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-koszesszenszesítési 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ékű. Az ??= operátor nem értékeli ki a jobb oldali operandusát, 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 a kísérleti verzióról a mainstreamre helyezték át.

A null feltételes operátor csak akkor alkalmaz taghozzáférési vagy ?.elemhozzáférési 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 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. Ezért a változónevek körül kell használni {} , például ${a} vagy amikor ? a változónév ${a?}része.

Az alábbi 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

Hasonlóképpen, az elem értéke lesz visszaadva.

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

Ha az operandus null értékű, az elem nem érhető el, és null értéket ad vissza.

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

Megjegyzés

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. Ezért a változónevek körül kell használni {} , például ${a} vagy amikor ? a változónév ${a?}része.

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

Lásd még