Windows PowerShell実践システム管理ガイド 第3版 (TechNet ITプロシリーズ)
- 作者: 横田秀之,河野憲義
- 出版社/メーカー: 日経BP社
- 発売日: 2017/10/20
- メディア: 単行本
- この商品を含むブログを見る
1. PowerShell入門(制御)
1.1. スクリプトファイル
1.1.1. テスト用ファイル作成
main.ps1を作成します。
1.2. 変数
1.2.1. 定義
# [main.ps1] $val = "test" write $val; $date = get-date write $date
1.2.2. 配列
# [main.ps1] # 定義 $arr = @() # 追加 $arr += 1 $arr += 2 # 参照 write $arr[0] write $arr[1] # 結合 $aa = $arr -join "-" write $aa # 全ての要素を表示(1) foreach($item in $arr){ write $item } # 全ての要素を表示(2) $arr | foreach { write $_ } # 配列へ追加する[+=] は遅いので、速度を求める場合はListを使用 $list = New-Object 'System.Collections.Generic.List[System.String]' $list.Add(1) $list.Add(2)
1.2.3. ハッシュ
# [main.ps1] # 定義 $hash = @{} # 設定 $hash["a"] = "hash-1" $hash["b"] = "hash-2" $hash["c"] = "hash-3" # 参照 write $hash["a"] write $hash["b"] write $hash["c"] # 削除 $hash.Remove("c") # 全ての要素を参照 foreach($key in $hash.Keys){ write $hash[$key] } # 存在確認 write $hash.Contains("a") write $hash.Contains("c")
1.3. 演算子
1.3.1. 論理演算子
# [main.ps1] $tt = (1 -eq 1) $ff = (1 -eq 2) # 論理和 $result = $tt -and $tt write $result > True # 論理積 $result = $tt -or $ff write $result > True # 論理否定 $result = -not $tt write $result > False
1.3.2. 比較演算子
# [main.ps1] write (1 -eq 1) # True write (1 -ne 2) # True write (2 -gt 1) # True write (1 -lt 2) # True write ("cat'eye" -like "cat*") # True ワイルドカード検索 write ("cat'eye" -match "^cat") # True 正規表現検索
1.3.3. 範囲演算子
# [main.ps1] 1..3 | foreach {write $_} > 1 2 3
1.3.4. 置換演算子
# [main.ps1] write ("flower" -replace "wer","rida") > florida
1.3.5. 文字列演算子
# [main.ps1] # 文字列を特定の文字で切り分けて配列を作る $arr = "a,b,c" -split "," write $arr[2] > c # 配列を特定の文字列を使って繋いで一つの文字列にする $arr2 = $arr -join "#" write $arr2 > a#b#c
1.3.6. 束縛演算子
# [main.ps1] write (1,2,3,4,5 -contains 3) > True
1.4. 制御
1.4.1. ifステートメント
# [main.ps1] $v1 = 1 if ($v1 -eq 1) { write "1" } elseif ($v1 -eq 2) { write "2" } else { write "1,2以外 " }
1.4.2. switchステートメント
# [main.ps1] $str2 = "apple" switch($str2) { "apple" { write "val:apple" } "orange" { write "val:orange" } default { write "val:other" } }
1.4.3. whileステートメント
# [main.ps1] $chk1 = 0; while($chk1 -lt 3){ write $chk1 $chk1++ }
1.4.4. forステートメント
# [main.ps1] for($i=0;$i -lt 3 ; $i++){ write $i }
1.4.5. foreachステートメント
# [main.ps1] foreach ($item in 0..3){ write $item }
1.5. 関数
1.5.1. 関数定義
関数の基本的な記述。
# [main.ps1] function test($price=100){ return "price:"+ $price } $ret = test(300) write $ret > price:300
1.6. 定型処理
1.6.1. ファイルの読込み
ファイルの読込み定型処理。
# [main.ps1] gc ./data.txt -Encoding utf8 | foreach { # 色々処理 write $_ }
1.6.2. 他スクリプトのメソッドを実行
他のスクリプトファイルを読み込み、そちらに定義されているメソッドを実行します。
# [func.ps1] # 定義 function funcA($msg){ Write-Host $msg }
# [main.ps1] # 実行するスクリプトのパスから、相対のファイルを読み込む . (@(Split-Path $myInvocation.MyCommand.path) + '\func.ps1') # func.ps1の関数を呼び出す funcA AABBCC
1.6.3. ハッシュのソート
# [main.ps1] $s = @{Apple = 100; Melon = 90; Banana = 70} # sort key foreach($dd in $s.GetEnumerator() | sort Key ){ Write-Host ($dd.Key + " -> " + $dd.Value) } # sort value foreach($dd in $s.GetEnumerator() | sort -Descending Value){ Write-Host ($dd.Key + " -> " + $dd.Value) }
1.6.4. 進捗率表示
進捗率を表示する雛形処理。
# [main.ps1] write "start" $watch = New-Object System.Diagnostics.StopWatch $watch.Start() #---------------------------------------- # 進捗率 write " 処理1(進捗表示)" $dataCount = 1000; for($i=1 ;$i -lt $dataCount ;$i++){ $per = ($i / $dataCount * 100) $per = [int]$per Write-Progress -Activity "データチェック" -PercentComplete $per -CurrentOperation "$per % 完了" } #---------------------------------------- $watch.Stop() $t = $watch.Elapsed write done write ---------------------- write ("execution time:" + ($t.TotalSeconds.ToString("0.000")) + " sec")
1.6.5. リンク一覧を取得
ページにあるリンク一覧を取得します。
# [main.ps1] $uri = "http://www.yahoo.co.jp" $rp = Invoke-WebRequest -Uri $uri -UseBasicParsing $links = $rp.Links | Select-Object -ExpandProperty href $links | foreach {$_} > 結果 https://www.yahoo-help.jp/ : :
1.6.6. CSV処理
CSVの出力と読み込み
# [powershell] > get-process | select -property Id,ProcessName,Cpu | export-csv -path process.log -notypeinformation > 結果 "Id","ProcessName","CPU" "4300","Agent","188.40625" "7648","ApplicationFrameHost","1.109375" "4032","armsvc","1.1875" "14256","audiodg","0.109375" : : > import-csv .\process.log | where { $_.ProcessName -eq "chrome" } | where { $_.CPU -as [float] -gt 100 } | sort {$_.CPU -as [float]} -descending | select -first 5 > 結果 Id ProcessName CPU -- ----------- --- 23588 chrome 6418.6875 25280 chrome 5169.0625 20596 chrome 1843.890625 22936 chrome 994.140625 24764 chrome 822
- 作者: Lee Holmes,マイクロソフト株式会社ITプロエバンジェリストチーム(監訳),菅野良二
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/10/23
- メディア: 大型本
- 購入: 4人 クリック: 72回
- この商品を含むブログ (15件) を見る