演算子
比較演算子
演算子 | 意味 | 要するに |
---|---|---|
-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
PowerShell 7.0 の新機能 | Microsoft Docs
Suggestion: implement ternary conditionals | GitHub PowerShell/PowerShell
スポンサーリンク