演算子

PowerShellの演算子

比較演算子

演算子 意味 要するに
-eq EQuals ==
-ne Not Equals !=
-gt Greater Than >
-ge Greater than or Equal >=
-lt Less Than <
-le Less than or Equal <=

-eq

PS> 2 -eq 2
True
PS> 1 -eq 2
False
PS> 1,2,3 -eq 2
2

-ne

PS> 2 -ne 2
False
PS> 1 -ne 2
True
PS> 1,2,3 -ne 2
1
3

-gt

PS> 1 -gt 1
False
PS> 2 -gt 1
True
PS> 1,2,3 -gt 1
2
3

-ge

PS> 1 -ge 1
True
PS> 2 -ge 1
True
PS> 1,2,3 -ge 1
1
2
3

-lt

PS> 1 -lt 1
False
PS> 1 -lt 2
True
PS> 1,2,3 -lt 2
1

-le

PS> 1 -le 1
True
PS> 1 -le 2
True
PS> 1,2,3 -le 2
1
2

配列比較演算子

演算子 意味
-contains 左辺の配列に右辺の値が含まれる場合、True
-notcontains 左辺の配列に右辺の値が含まれる場合、False
-in 左辺の値が右辺の配列に含まれる場合、True
-notin 左辺の値が右辺の配列に含まれる場合、False

-contains

PS> 1,2,3 -contains 2
True
PS> 1,2,3 -contains 4
False

-notcontains

PS> 1,2,3 -notcontains 2
False
PS> 1,2,3 -notcontains 4
True

-in

PS> 2 -in 1..10
True

-notin

PS> 2 -notin 1..10
False

型比較演算子

演算子 意味
-is 左辺と右辺の型が一致する場合、True
-isnot 左辺と右辺の型が一致する場合、False

-is

PS> 'abc' -is [String]
True
PS> 'abc' -is [Int]   
False
PS> 'abc'.GetType()   

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

-isnot

PS> 'abc' -isnot [String]
False
PS> 'abc' -isnot [Int]   
True

文字列の比較

文字列の比較は、デフォルトでは大文字小文字を区別しません。
大文字小文字を区別させるためには -ceq を使用します。
大文字小文字を区別しないことを明示するには -ieq を使用します。

演算子 意味
-ceq 大文字小文字を区別する (Case sensitive EQual)
-eq 大文字小文字を区別しない
-ieq 大文字小文字を区別しない (Insensitive EQual)

-ceq

PS> "PowerShell" -ceq "powershell"
False

-eq

PS> "PowerShell" -eq "powershell" 
True

-ieq

PS> "PowerShell" -ieq "powershell"
True

文字列演算子

演算子 意味
-like ワイルドカード文字 (*) を使用した一致
-notlike ワイルドカード文字 (*) を使用した不一致
-match 正規表現による一致
-notmatch 正規表現による不一致
-replace 正規表現で文字列を置換する
-split 正規表現で文字列を分割する
-join 文字列を結合する
-f フォーマット演算子

-like

PS> "PowerShell" -like "*shell" 
True

-notlike

PS> "PowerShell" -notlike "*shell"
False

-match

例1 先頭がpowerから始まる文字列を抽出する例

PS> "PowerShell", "ShellPower" -match "^power" 
PowerShell

例2 $Matches変数の確認

$Matches変数に、正規表現の一致結果を格納されています。
一致結果が、左から順番に昇順で格納されています。

PS> 1234 -match '(.)(.)(.)(.)'
True
PS> $Matches

Name                           Value
----                           -----
4                              4
3                              3
2                              2
1                              1
0                              1234

例3 userとidの値を抽出する例

PS> 'strings user=powershell, id=100 strings' -match '(?:user=)(?<user>\w+), (?:id=)(?<id>\d+)'      
True
PS> $Matches

Name                           Value
----                           -----
id                             100
user                           powershell
0                              user=powershell, id=100

# userとidを取得できている!
PS> $Matches.user
powershell
PS> $Matches.id
100
PS>

上記の例で使用している、正規表現のパターン文字については以下の通り。

パターン文字 意味
?:pattern サブ式を定義
?<name>pattern patterに一致した値にnameのラベルをつける
\w 単語1文字
\d 数字1文字
+ 直前の文字の1個以上の繰り返し

-notmatch

PS> "PowerShell", "ShellPower" -notmatch "^power"
ShellPower

-replace

例1 単純に文字列置換する例

PS> "PowerShell" -replace "Shell", "Point"
PowerPoint

# 拡張子変換の例
PS> Get-ChildItem *.txt | Rename-Item -NewName { $_.name -replace '\.txt$','.log' }

例2 変換前の文字列を、変換後のパターン文字として利用する例

パターンに一致した変換前の文字列を、変換後のパターン文字として利用できます。
パターンに一致した順番をもとに、$numberという形で指定します。
下記の例では、文字列の順序を入れ替えています。

PS> 'PowerShell' -replace '(Power)(Shell)', '$2$1'
ShellPower

例3 一致パターンに名前をつけて、変換後のパターン文字として利用する例

?<name>で一致した文字列に名前をつけて、${name}で利用しています。

PS> 'PowerShell' -replace '(?<power>Power)(?<shell>Shell)', '${shell}${power}'
ShellPower

-split

PS> -split "Power Shell"
Power
Shell
PS> "Power,Shell" -split ","
Power
Shell

-join

# 失敗例
PS> -join "a", "b", "c"
a
b
c

# 成功例
PS> -join ("a", "b", "c")
abc

PS> "a", "b", "c" -join ""                
abc

# 指定した文字列を使って、文字列を結合する
PS> "Power", "Shell" -join ","
Power,Shell

-f

PS> "{0}{1}" -f "Power", "Shell"       
PowerShell

その他のフォーマット例

# Dec => Hex
PS> '0x{0:x}' -f 255             
0xff
PS> '0x{0:X}' -f 255             
0xFF

# Display with zero
PS> '{0:d8}' -f 255
00000255

# Padding. 左詰め・右詰め
PS> '|{0,-8}|' -f 255
|255     |
PS> '|{0,8}|' -f 255 
|     255|

しかし、Paddingに関しては、
PadLeftメソッドやPadRightメソッドを使用したほうがわかりやすいかもしれませんね。

# PadLeftメソッドの使用例
PS> (255).ToString().PadLeft(8)    
     255
PS> (255).ToString().PadLeft(8," ")
     255
PS> (255).ToString().PadLeft(8,"0")        
00000255

論理演算子

演算子 意味
-and 左辺と右辺がどちらも成り立つときTrue
-or 左辺または右辺が成り立つときTrue
-xor 左辺と右辺が異なるときTrue
-not 右辺の反転
! 同上

-and

PS> (1 -eq 1) -and (1 -eq 2)
False

-or

PS> (1 -eq 1) -or (1 -eq 2)
True

-xor

PS> (1 -eq 1) -xor (2 -eq 2)
False

-not

PS> -not (1 -eq 1)
False

!

PS> !(1 -eq 1)
False

& Call operator

&をスクリプトやスクリプトブロックの前につけてることで、処理を実行できます。

例1

PS> $command = "Get-Date"     
PS> $command                  
Get-Date
PS> & $command                

2020年11月25日 水曜日 16:26:11

例2

PS> {Get-Date}
Get-Date
PS> & {Get-Date}

2020年11月25日 水曜日 16:29:48

例3

PS> Get-Content ./script.ps1
Get-Date
PS> & ./script.ps1

2020年11月25日 水曜日 16:31:38

.. Range Operator

PS> 1..3    
1
2
3
PS> 1..-1
1
0
-1
PS> 'a'..'c'
a
b
c
PS> 'A'..'C'
A
B
C

三項演算子 a ? b : c

PowerShell7から使用可能。

# 構文
<condition> ? <if-true> : <if-false>
# 三項演算子を使用して、Yearが'Odd'か'Even'を出力する例
PS> (Get-Date).ToString("yyyy") % 2 ? 'Odd' : 'Even'
Even

パイプラインチェーン演算子 && と ||

PowerShell7から使用可能。

&&演算子

左のコマンドが成功した場合、右のコマンドを実行する

PS> Write-Output 'Success' && Write-Error 'Error'
Success
Write-Error: Error

PS> Write-Error 'Error' && Write-Output 'Success'
Write-Error: Error

||演算子

左のコマンドが失敗した場合、右のコマンドを実行する

PS> Write-Output 'Success' || Write-Error 'Error'
Success
PS> Write-Error 'Error' || Write-Output 'Success'
Write-Error: Error
Success

null合体演算子、null条件付き代入演算子

PowerShell7から使用可能。

?? null合体演算子

左側のオペランドがNULLの場合、右側のオペランドを返す。
左側のオペランドがNULLでない場合、左側のオペランドを返す。

# $num is $null
PS> $num
PS> $num ?? 100
100

# $num is not $null
PS> $num = 1
PS> $num ?? 100
1

??= null条件付き代入演算子

左側のオペランドがNULLの場合のみ、代入できる。

# $num is $null
PS> $num = $null
PS> $num ??= 100
PS> $num
100

# $num is not $null
PS> $num = 1
PS> $num ??= 100
PS> $num
1

YouTube

動画による説明はこちら。

参考リンク

About Operators | Microsoft Docs

About Comparison Operators | Microsoft Docs

About Regular Expressions | Microsoft Docs

About Split | Microsoft Docs

About join | Microsoft Docs

PowerShell 7.0 の新機能 | Microsoft Docs

Suggestion: implement ternary conditionals | GitHub PowerShell/PowerShell


スポンサーリンク