PerlとbashとPHPを合併したような文法を持つPowerShell。
文末にセミコロンは要らず、また文字列も.ではなく+で連結する点がPerlやPHPと異なります。
-le、-ge、-And、-Orなど英語の比較・論理・ビット演算子も特徴的です。
<#==============================
複数行のコメントは
このように
書けます。
==============================#>
# 1行コメントはこのように書けます。
# echoとWrite-Outputは同じ物。Write-Hostは少し違う(追々)
echo "Hello, World."
Write-Host "こんにちは。"
$var1 = 42
$var2 = 35
$var3 = $var1 + $var2
$var4 = $var1 - $var2
echo "結果は${var3}と${var4}"
$msg = "結果は" + $var3 + "と" + $var4
echo $msg
# C言語式の代入とインクリメント演算子もある
$var2 += 18
$var3--
$var4++
echo "${var2} ${var3} ${var4}"
# 配列 初期化時の値は 42 53 76 8
$arr1 = @($var1, $var2, $var3, $var4)
# 分岐と反復。-ge、-Andなどの演算子が特徴的。Else Ifはelseif
foreach($v in $arr1){
if($v -ge 50){
echo "${v}は50以上です。"
} elseif($v -ge 40 -And $v -lt 50){
echo "${v}は40以上50未満です。"
} else {
echo "${v}は50未満です。"
}
}
# 普通のfor文もある
$var5 = 1
for($i=0; $i -lt $arr1.Length; $i++){
$var5 *= $arr1[$i]
}
# 整形出力。フォーマットはExcelに似ている
echo($var5.ToString("#,0.00"))
# 次の方法も可能。複数の値があるときは後ろに,で区切って並べる
# 0が0番目の引数を、15が15文字幅(正なら右詰め、負なら左詰め)、
# ,がカンマ区切り、00が小数点以下2桁まで表示を指示する
echo("計算結果:[{0,15:#,0.00}]" -f $var5)
$str1 = "Hello,Power,Shell,World"
echo("文字列の長さは" + $str1.Length) # 括弧は必要。ないと1行ずつ分かれて表示される
# 大文字に変換
echo $str1.toUpper()
# 配列を分割
$arr2 = $str1 -split ","
# 配列を表示
echo $arr2
foreach($v in $arr2){
if($v -cmatch "^.[opqr]"){ # 2文字目がopqrのいずれか
echo "${v}はマッチします。"
} else {
echo "${v}はマッチしません。"
}
}
# 現在時刻の取得
$dstr1 = Get-Date -format "yyyy/MM/dd HH:mm:ss"
# 指定した年月日の値を取得。次の両方の方法が可能です。
##$tm = Get-Date -year 2020 -month 4 -day 26
$tm = Get-Date -Date "2020/04/26"
$dstr2 = $tm.ToString("yyyy/MM/dd")
# ヒアドキュメント。二重引用符で囲むと変数展開がされる。一重だとされない
$s = @"
現在時刻は${dstr1}です。
特定の日付とは…${dstr2}です。
"@
echo $s