PowerShell勉強用 その1

PowerShell

http://www.atmarkit.co.jp/ait/articles/0708/30/news137.html
http://www.atmarkit.co.jp/ait/articles/0709/20/news125.html

変数
${Windows PowerShell + .NET Framework}
$x = 123
$x = “abc”

ヒア・ドキュメント(here document)
(通常は複数行にまたがる)大量のテキストをスクリプト・インラインで記述するための仕組みだ。
ヒア・ドキュメントは「@”<改行>~<改行>”@」(または「@’<改行>~<改行>’@」)の形式で記述できる。

PS > $name=”山田”
PS > Write-Output “私の名前は $name です。”
私の名前は 山田 です。
PS > Write-Output ‘私の名前は $name です。’
私の名前は $name です。
”ではそのまま
“”では変数が展開されて出力される

エスケープ・シーケンス 概要

  • `n 改行
  • `r キャリッジ・リターン
  • `t タブ
  • `b バックスペース

配列
PS > $x = 1,2,3
PS > Write-Output $x[0]
1 ……0番目の要素を出力
PS > $z = @{FirstName=”Yoshihiro”; LastName=”Yamada”; Birth=”Shizuoka”}
PS > Write-Output $z[“FirstName”]
Yoshihiro ……FirstName要素を出力
PS > Write-Output $z.FirstName
Yoshihiro ……FirstName要素を出力

要素, 要素, 要素, … ……配列
@{キー名=値; キー名=値; …} ……連想配列
@(要素, 要素, 要素, …)

空の配列を明示的に宣言するには、単に「()」とするのではなく、
「@()」のように記述する(空の連想配列を生成する場合は「@{}」)。

変数のアクセス
$変数名[インデックス番号]
$変数名[“キー名”]

分岐
$x = 1
if($x -eq 1){
Write-Output ‘変数$xは1です。’
}else{
Write-Output ‘変数$xは1ではありません。’
}

$x = 100
if($x -ge 80){
Write-Output ‘変数$xは80以上です。’
}elseif($x -ge 40){
Write-Output ‘変数$xは40以上80未満です。’
}else{
Write-Output ‘変数$xは40未満です。’
}

$x = 1
switch($x){
1 {
Write-Output ‘変数$xは1です。’
break
}
1 {
Write-Output ‘変数$xは1です。(2)’
break
}
3 {
Write-Output ‘変数$xは3です。’
break
}
default {Write-Output ‘変数$xは1、2、3ではありません。’}
}

$x = “XYZ”
switch -wildcard ($x){
“X” {Write-Output ‘変数$xは”X”で始まります。’} “X_” {Write-Output ‘変数$xは”X”+1文字です。’} “XA” {Write-Output ‘変数$xは”XA”で始まります。’}
}

ループ
$ary=@(100,120,300)
for($i=0; $i -lt 3; $i++){
$sum += $ary[$i];
}
Write-Output $sum

$ary=@(100,120,300)
foreach($dat in $ary){
$sum += $dat;
}
Write-Output $sum

@(100,120,300) | ForEach-Object {$sum += $_}
Write-Output $sum

$_ はパイプラインで渡されたオブジェクト

※while命令を利用した例
$i=0;
$sum=0;
$ary=@(100,120,300)
while($i -lt 3){  ……変数$iが3未満の場合の間、ループを継続
$sum += $ary[$i];
$i++;
}
Write-Output $sum

※do ~ while命令を利用した例
$i=0;
$sum=0;
$ary=@(100,120,300)
do{
$sum += $ary[$i];
$i++;
}while($i -lt 3)  ……変数$iが3未満の場合の間、ループを継続
Write-Output $sum

関数
function Triangle([double] $width=1, [double] $height=1) {
return $width * $height / 2
}

Triangle 2 6  # 結果は 6 と表示される ……(1)

function 関数名 [(引数[=デフォルト値],…)] {
関数の本体

[return 戻り値]

}

function Triangle($width=1, $height=1) {
でもいい

関数の実行時
Triangle 2 6
Triangle -height 6 -width 2

ファイル自体にパラメータ
Param([string] $name)
Write-Output “こんにちは、 $name さん!”

PS > ./Hello.ps1 “山田”
こんにちは、 山田 さん!
PS > ./Hello.ps1 -name “山田”
こんにちは、 山田 さん!

名前無し引数
function Triangle {
return $Args[0] * $Args[1] / 2
}

スコープ
function global:Triangle([double] $width=1, [double] $height=1) {
return $width * $height / 2
}

global:をつけるとスクリプト外から参照できる
このスコープ修飾子は、変数に対しても「$global:x」(グローバル変数)、
「$script:x」(スクリプト変数)、
「$local:x」(ローカル変数)のように指定することができる。

メール配信
# 電子メールのメッセージを作成
$mail = New-Object System.Net.Mail.MailMessage(“あて先@example.jp”,”送信元@example.co.jp”) ……(1)
$mail.Subject = “PowerShellスクリプティング入門” # 件名
$mail.Body = @”
こんにちは、PowerShell!
PowerShellでスクリプティングに挑戦しましょう。
“@ # 本文
# 件名/本文の文字エンコーディング
$mail.SubjectEncoding = [System.Text.Encoding]::GetEncoding(“ISO-2022-JP”)
$mail.BodyEncoding = [System.Text.Encoding]::GetEncoding(“ISO-2022-JP”)
# 指定されたSMTPサーバで電子メールを送信
$smtp = New-Object System.Net.Mail.SmtpClient(“smtp.examples.ne.jp”)
$smtp.Send($mail)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です