Think Twice
IT技術メモ | PowerShellのメモ
Created: 2021-05-16 / Updated: 2021-10-20

PowerShellの文法


ここではPowerShellの文法を簡単にまとめておきます。

目次


基礎文法 - Hello World

コンソールに文字表示

基礎文法 - コメント

基礎文法 - 式の途中で改行する

参考

基礎文法 - 変数宣言

基礎文法 - スコープ

明示的なスコープの読み取り

基礎文法 - 型

エリアス .NET Framework
byte System.Byte
int System.Int32
long System.Int64
double System.Double
decimal System.Decimal
char System.Char
bool System.Boolean
string System.String
array System.Array
xml System.Xml.XmlDocument
type System.Type
DateTime System.DateTime

参考

基礎文法 - 演算子

比較演算子

PowerShell C系言語 説明
-eq == 等しい
-ne != 等しくない
-gt > より大きい
-ge >= 以上
-lt < より小さい
-le <= 以下
-like なし ワイルドカードと等しい
-notlike なし ワイルドカードと等しくない
-match なし 正規表現と等しい
-notmatch なし 正規表現と等しくない

算術演算子

PowerShell C系言語 説明
+ + 加算
- - 減算/符号反転
* * 乗算
/ / 除算
% % 余剰
[Math]::Pow(x,y) pow(x,y) べき乗(xのy乗)
= = 代入
+= += 加算代入
-= -= 減算代入
*= *= 乗算代入
/= /= 除算代入
%= %= 剰余代入
++ ++ インクリメント
-- -- デクリメント

論理演算子

PowerShell C系言語 説明
-and && AND
-or || OR
-not または ! ! NOT

ビット演算子

PowerShell C系言語 説明
-band & AND
-bor | OR
-bnot ! NOT
-bxor ^ XOR
-shl << 左シフト
-shr >> 右シフト

型演算

PowerShell 説明
$a -is [型] 型と等しい
$a -isnot [型] 型と等しくない
$a -as [型] 型へキャスティング、失敗時は $null
[型]$a 型へキャスティング(失敗時はエラー)

参考

基礎文法 - 条件分岐

if-elseif-else

if
Copy
if (Boolean_expression) {
   // Executes when the Boolean expression is true
}
if-else
Copy
if (Boolean_expression) {
   // Executes when the Boolean expression is true
} else {
   // Executes when the Boolean expression is false
}
if-elseif-else
Copy
if (Boolean_expression 1) {
   // Executes when the Boolean expression 1 is true
} elseif (Boolean_expression 2) {
   // Executes when the Boolean expression 2 is true
} elseif (Boolean_expression 3) {
   // Executes when the Boolean expression 3 is true
} else {
   // Executes when the none of the above condition is true.
}

Copy
$filesize = 2MB

if ($filesize -lt 1MB) {
    Write-Host "1MBより小さい"
} elseif ($filesize -lt 2MB) {
    Write-Host "2MBより小さい"
} else {
    Write-Host "2MB以上"
}
出力結果
Copy
2MB以上

参考

文字列 - 複数行文字列

0017_string.ps1
Copy
$a = 'あいう'

# 変数展開あり
$str1 = @"
ヒアドキュメントでは複数行のテキストを
1つの文字列として扱います。
変数`$aの値は$($a)です。
"@

# 変数展開なし
$str2 = @'
ヒアドキュメントでは複数行のテキストを
1つの文字列として扱います。
変数`$aの値は$($a)です。
'@

Write-Host $str1
Write-Host ('-' * 20)
Write-Host $str2

出力結果

Copy
PS C:\temp> .\0017_string.ps1
ヒアドキュメントでは複数行のテキストを
1つの文字列として扱います。
変数$aの値はあいうです。
--------------------
ヒアドキュメントでは複数行のテキストを
1つの文字列として扱います。
変数`$aの値は$($a)です。

参考

関数 - 関数宣言

関数 - 可変長引数

function_variable_length_parameter.ps1
Copy
function foo {
    Write-Host $args.Count
    foreach($i in $args) {
        Write-Host $i
    }
}

function bar($a, $b) {
    Write-Host "$($args.Count) a=$a b=$b"
    foreach($i in $args) {
        Write-Host $i
    }
}

# 呼び出し
Write-Host '--- call foo'
foo a b あいう
Write-Host '--- call bar 1'
bar 10 20 a b c あいう  # $a, $bに10, 20が割り当てられ、それ以降が$argsに割り当てられる
Write-Host '--- call bar 2'
bar 10 20  # $a, $bに10, 20が割り当てられ、$argsには何も割り当てられず空リストになる
出力結果
Copy
PS C:\temp> .\function_variable_length_parameter.ps1
--- call foo
3
a
b
あいう
--- call bar 1
4 a=10 b=20
a
b
c
あいう
--- call bar 2
0 a=10 b=20

関数 - 値渡し、参照渡し

function_args_byval_byref.ps1
Copy
# 値渡し
function byVal($arg) {
    $arg = 'Good bye!'
    Write-Host "in function(byVal): $arg"
}

# 参照渡し
function byRef([ref]$arg) {
    $arg.Value = 'Good bye!'
    Write-Host "in function(byRef): $($arg.Value)"
}
function byRef2($arg) {
    $arg.Value += '!!'
    Write-Host "in function(byRef2): $($arg.Value)"
}

$str = 'Hello'
$str
byVal $str  # 値渡し
$str  # => Hello のまま

byRef([ref]$str) # 参照渡し
$str  # => Good bye! に書き換わっている
byRef2([ref]$str) # 参照渡し
$str  # => Good bye!!! に書き換わっている
出力結果
Copy
PS C:\temp> .\function_args_byval_byref.ps1
Hello
in function(byVal): Good bye!
Hello
in function(byRef): Good bye!
Good bye!
in function(byRef2): Good bye!!!
Good bye!!!

関数 - 引数のデフォルト値

出力結果
Copy
PS C:\temp> .\function_args_default_value.ps1       
値は10です。
値は20です。
値は15と10です。
値は15と25です。

コレクション - ハッシュテーブル

ハッシュテーブルに初期値とともに宣言する場合は、@{}の中に名前=値の形式で記述します。
改行;で区切ると複数名前を値の組を指定できます。

Copy
@{ <名前1> = <値1>; [<名前2> = <値2> ] ...}
Copy
@{
    <名前1> = <値1>
    [<名前2> = <値2>]
          :
          :
}

参考


参考

参考サイト

ソース


  1. 両方に書くと「function の宣言に引数が指定されている場合、param ステートメントを使用できません。」というエラーになります。 ↩︎