
- 変更履歴
- 1 はじめに
- 2 演算子
- 2.1 算術演算子
- 2.2 代入演算子
- 2.3 比較演算子
- 2.4 マッチング演算子
- 2.5 配列演算子
- 2.6 型演算子
- 2.7 文字列操作演算子
- 2.8 単項演算子
- 2.9 論理演算子
- 2.10 ビット処理演算子
- 2.11 リダイレクト演算子
- 2.12 特殊な演算子
- 2.12.1 “$()”: 部分式演算子
- 2.12.2 “@()”: 配列部分式演算子
- 2.12.3 “&”: 呼び出し演算子
- 2.12.4 [型名]: キャスト演算子
- 2.12.5 “,”: コンマ演算子
- 2.12.6 “.”: ドットソース演算子
- 2.12.7 “-f”: 書式演算子
- 2.12.8 “ [0]”: インデックス演算子
- 2.12.9 “|”: (パイプライン演算子)
- 2.12.10 “.”: メンバーアクセス演算子
- 2.12.11 “..”: レンジ演算子
- 2.12.12 “::”: スタティックメンバー演算子
- 2.12.13 “if-true”、“if-false”: 三項演算子
- 2.12.14 “??”: null合体演算子
- 2.12.15 “??=”: null合体代入演算子
- 2.12.16 “?.”、“?[]”: null条件演算子
- 3 演算子の優先順位
変更履歴
- Rev. 0.7 : 2025年05月15日
- 新規作成
1 はじめに
PowerShellって、従来のWindowsコマンドプロンプトやLinuxなどUNIX系のBashなどと
比べるとどうも難しい。
とにかく、“コマンドレット(cmdlet)”っていうのが、よくわからない。
訳のわからない演算子もたくさんでてくる。
「PowerShell実践ガイドブック」なる本を購入してみたが、分厚くてくじけそうになりました。
それじゃー、わかるところを始めようと、
まずは身近なファイル・ディレクトリ操作のコマンドレットから初めてみました。
【初めてのPowerShell】その1)ファイル・フォルダー操作のコマンドレットと外部コマンド
以降、PowerShellスクリプトが書けるようになるまでを、順番に整理して行くことにしました。
① コマンドレットとは
② 主要なコマンドレットと入出力、文字列操作
③ 変数とデータ型
④ PowerShellで使われる演算子
⑤ パイプラインとリダイレクション
⑥ スクリプティングと自動化
⑥については、下に示すような学んで行くべき要素があると思いますが、
2025/05時点では、とりあえずざっくりとしたこの題名で。。。
・ 制御構文
・ オブジェクトの操作
・ 基本的なスクリプティングと関数
第2回目は、PowerShellの主要なコマンドレットと、
入出力コマンドや文字列のクラスについて、どういうものがあるのか整理してみました。
現在Windowsコマンドプロンプトが理解できることを前提に、
PowerShellでどのような要素に置き換えられるのかという視点でまとめてみました。
【初めてのPowerShell】その2)主要なコマンドレットと入出力、文字列操作
第3回目は、2025/05/15現在変数について整理してみる予定です。
わざわざまとめる必要もないことかと思いましたが、PowerShellの変数は奥が深そうです。
第4回目の本記事は、PowerShellで使う演算子を整理してみました。
本記事では、個々の要素の詳しい使い方の説明は行いません。
どのような要素があるのかをまとめただけのものであることをお断りしておきます。
2 演算子
PowerShellの演算子を、下に示すカテゴリ別に表にまとめあげてみました。
① 算術演算子
② 代入演算子
③ 比較演算子
④ マッチング演算子
⑤ 配列演算子
⑥ 型演算子
⑦ 文字列操作演算子
⑧ 単項演算子
⑨ 論理演算子
⑩ ビット処理演算子
⑪ リダイレクト演算子
⑫ 特殊な演算子
演算子の詳しい説明は、次のページをご覧ください
本記事では、PowerShell特有の④、⑤、⑥、⑦、⑫の演算子については、簡単な例を示します。
算術演算子といった2項演算子や“++”、“--”といった単項演算子など、
他の言語にもあるものについては、例を示すのを割愛します。
2.1 算術演算子
演算子には下に示す優先順位があります。
演算の順番を変更するには、優先したい演算を「かっこ()」で括ります。
- (負の数を表すマイナス記号)
*、/、%
+、- (減算を表すマイナス記号)
2.2 代入演算子
2.3 比較演算子
2.4 マッチング演算子
2.4.1 ”-like”、”-notlike”
PS C:\> "PowerShell" -like "*shell"
True
PS C:\> "PowerShell", "Server" -like "*shell"
PowerShell
PS C:\> "PowerShell" -notlike "*shell"
False
PS C:\> "PowerShell", "Server" -notlike "*shell"
Server
2.4.2 “-match”、”-notmatch”
PS C:\> "Sunday", "Monday", "Tuesday" -match "sun"
Sunday
PS C:\> $matches
PS C:\>
PS C:\> "Sunday" -match "sun"
True
PS:C:\> $matches
Name Value
---- -----
0 Sun
PS C:\> "Sunday", "Monday", "Tuesday" -notmatch "sun"
Monday
Tuesday
PS C:\> "Sunday" -notmatch "rain"
True
PS C:\> "Sunday" -notmatch "day"
False
PS:C:\> $matches
Name Value
---- -----
0 day
2.5 配列演算子
2.5.1 “-contains”、”-notcontains”
PS C:\> "abc", "def" -contains "def"
True
PS C:\> $a = "abc", "def"
PS C:\> "abc", "def", "ghi" -contains $a
False
PS C:\> $a, "ghi" -contains $a
True
PS C:\> "abc", "def" -notcontains "def"
False
PS C:\> $a = "abc", "def"
PS C:\> "abc", "def", "ghi" -notcontains $a
True
PS C:\> $a, "ghi" -contains $a
False
2.5.2 “-in”、”-notin”
“-in”演算子は“-contains”演算子の、“-notin”演算子は“-notcontains”演算子の
左辺と右辺を入れ替えたものです。
PS C:\> "def" -in "abc", "def"
True
PS C:\> "def" -notin "abc", "def"
False
2.6 型演算子
ブール型演算子(“-is” および“-isnot”)は、
オブジェクトが指定された.NET型のインスタンスであるかどうかを示します。
2.6.1 “-is”、“-isnot”
PS C:\> (Get-Date) -is [datetime] # Result is True
True
PS C:\> (Get-Date) -isnot [datetime] # Result is False
False
2.6.2 “-as”
PS C:\> "5/7/07" -as [datetime] # Result is Monday, May 7, 2007 12:00:00 AM
2005年7月7日 0:00:00
2.7 文字列操作演算子
2.7.1 -replace”
# Case Insensitive
PS C:\> "book" -replace "B", "C"
Cook
# Case Sensitive
PS C:\> "book" -creplace "B", "C"
book
PS C:\> "Book" -creplace "B", "C"
Cook
2.7.2 “-split”
PS C:\> "Lastname:FirstName:Address" -split ":"
Lastname
FirstName
Address
2.7.3 “-join”
PS C:\> -join ("a", "b", "c")
abc
2.8 単項演算子
2.9 論理演算子
2.10 ビット処理演算子
2.11 リダイレクト演算子
コマンドプロンプトやBashと同じく、
PowerShellもリダイレクトを使って出力先をファイルや$nullに差し替えることができます。
PowerShellは、コマンドプロンプト、Bashなどの標準出力、標準エラー出力だけでなく、
表2.11-2に示す出力ストリームのリダイレクトをサポートしています。
2.12 特殊な演算子
2.12.1 “$()”: 部分式演算子
下に示すように、「“”」でくくられた文字列の中で、
「$」があればPoweShellは変数と認識し、その変数に格納された内容を展開します。
PS C:\> $a = 'World!'
PS C:\> $b = 'Hello $a'
PS C:\> $c = "Hello $a"
PS C:\> $b
Hello $a
PS C:\> $c
Hello World!
2.12.2 “@()”: 配列部分式演算子
1つ以上のステートメントの結果を配列として返します。
結果は、常に 0 個以上のオブジェクトの配列になります。
2.12.3 “&”: 呼び出し演算子
PowerShellジョブで、バックグラウンドでパイプラインの前にパイプラインを実行します。
この演算子は、UNIX制御演算子アンパサンド(&)と同様に動作します。
この演算子は、コマンドを実行してから、サブシェルでジョブとして非同期的に実行します。
PS C:\> $c = "Get-ExecutionPolicy"
PS C:\> $c
Get-ExecutionPolicy
PS C:\> $c
RemoteSigned
2.12.4 [型名]: キャスト演算子
オブジェクトを指定した型に変換または制限します。
PS C:\> [datetime]'2/20/88' -
[datetime]'1/20/88' -eq [timespan]'31'
True
2.12.5 “,”: コンマ演算子
二項演算子として、コンマは配列を作成するか、作成される配列に追加します。
式モードでは、単項演算子として、コンマは1つのメンバーのみを含む配列を作成します。
PS C:\> $myArray = 1,2,3
PS C:\> $SingleArray = ,1
PS C:\> Write-Output (,1)
1
2.12.6 “.”: ドットソース演算子
スクリプトを現在のスコープで実行して、
スクリプトによって作成されるすべての関数、エイリアス、変数が現在のスコープに追加され、
既存のスコープがオーバーライドされるようにします。
スクリプトによって宣言されたパラメーターは変数になります。
値が指定されていないパラメーターは、値のない変数になります。
ただし、自動変数$argsは保持されます。
. C:\scripts\sample.ps1 1 2 -Also:3
2.12.7 “-f”: 書式演算子
文字列の書式を指定します。
左辺の文字列を書式を入れておくと、その書式に右辺の文字列を挿入します。
詳しくは、 “String.Format”を参照してください。
PS C:\> "Name = {0}, hours = {1:hh}, time = {1:hh:mm:ss}"
-f "hoge", (Get-Date)
Name = hoge, hours = 08, time = 08:32:52
2.12.8 “ [0]”: インデックス演算子
配列やハッシュ テーブルなど、インデックス付きコレクションからオブジェクトを選択します。
PS C:\> $a = @(1, 2, 3)
PS C:\> $a[0]
1
PS C:\> $a[-1]
3
PS C:\> $a[2, 1, 0]
3
2
1
2.12.9 “|”: (パイプライン演算子)
その前にあるコマンドの出力を、その後のコマンドに送信("pipes")します。
出力に複数のオブジェクト("コレクション")が含まれている場合、
パイプライン演算子は一度に1つずつオブジェクトを送信します。
PS C:\> Get-Process | Get-Member
PS C:\> Get-Service | Where-Object {$_.StartType -eq 'Automatic'}
【パイプラインチェーン演算子の“&&”と“||”】 左側のパイプラインの成功に基づいて、右側のパイプラインを条件付きで実行します。
# If Get-Process successfully finds a process called notepad,
# Stop-Process -Name notepad is called
PS C:\> Get-Process notepad && Stop-Process -Name notepad
# If npm install fails, the node_modules directory is removed
PS C:\> npm install || Remove-Item -Recurse ./node_modules
2.12.10 “.”: メンバーアクセス演算子
オブジェクトのプロパティとメソッドにアクセスします。
メンバー名には式を指定できます。
PS C:\> $myProcess.PeakWorkingSet
PS C:\> (Get-Process powershell).Kill()
PS C:\> 'OS', 'Platform' |
ForEach-Object { $PSVersionTable. $_ }
2.12.11 “..”: レンジ演算子
レンジ演算子は、連続する整数または文字の配列を表すために使用できます。
レンジ演算子で結合された値は、範囲の開始値と終了値を定義します。
PS C:\> 'a'..'e'
a
b
c
d
e
2.12.12 “::”: スタティックメンバー演算子
.NETランタイムのクラスにある、スタティックプロパティやメソッドにアクセスします。
スタッティクメンバーを知るためには、 “Get-Member -Static”を使うとよいでしょう。
PS C:\> [DateTime]::Now
2.12.13 “if-true”、“if-false”: 三項演算子
PS C:\> $message = (Test-Path $path) ? "Path exists" : "Path not found"
2.12.14 “??”: null合体演算子
PS C:\> $x = $null
PS C:\> $x ?? 100
100
2.12.15 “??=”: null合体代入演算子
PS C:\> $x = $null
PS C:\> $x ??= 100
PS C:\> $x
100
2.12.16 “?.”、“?[]”: null条件演算子
PS C:\> $a = @{ PropName = 100 }
PS C:\> ${a}?.PropName
100
3 演算子の優先順位
3.1 演算子の優先順位
表3.1-1に示す演算子は、優先度の高い順に並んでいます。
表3.1-2に示す演算子は、同じ優先度を持っています。
表3.1-3に示す演算子は、優先度の高い順に並んでいます。
3.2 優先度の変更
演算子の優先度は、“()”を使うことで変更することができます。
以上
本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。
少しでも役に立てていただければ、うれしく思います。
このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元と著者名は明らかにしてください。
なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。