SlideShare a Scribd company logo
1 of 74
Download to read offline
Cloud OS MVP Roadshow 2014 年 6 月 Cloud OS Tech Day!
IT Pro のための
PowerShell スクリプティング
高井 一輝
System Center User Group Japan
自己紹介
• 高井 一輝 (Takai Kazuki)
• 某 ISP 勤務
• クラウドとオンプレミスを組み合わせたインテグレーション
• 見積り、提案書の作成から設計、構築、試験、運用まで
• ネットワーク、サーバ (Windows、Linux)
• System Center User Group Japan (SCUGJ)
• Twitter : @zhuky7 / Facebook : kazuki.takai
• Blog : http://operationslab.wordpress.com/
2
本日の内容
• お話すること
• PowerShell についてのおさらい
– スクリプトを記述するうえで必要となる内容
– スクリプトを実行するために必要となる内容
• スクリプトでやりたいことを実現するためのパーツ
• スクリプトを作成するうえで注意すべきこと
• お話しないこと
• PowerShell コマンドレットの実行方法
• PowerShell Remoting の仕組み
• PowerShell Workflow
• 個々の製品の具体的な管理方法
3
このセッションのゴール
• 簡単な PowerShell スクリプトを作成できる
• 目的に応じてスクリプトを作成できる
• スクリプトの実行、運用ができる
4
本日の環境
• Windows 7 Professional with WMF 4.0
• Windows Server 2012 R2
5
アジェンダ
• Windows PowerShell の基礎
• スクリプトを作成する
• スクリプトの動作を確認する
• スクリプトを展開する
6
Windows PowerShell の基礎
7
PowerShell とは
• Windows で利用可能な新しいシェル / スクリプト言語
• Windows Server 2008 R2 以降で標準搭載
• コマンドプロンプトよりも高度な処理 / 制御が可能
• WSH よりもスクリプトの記述が容易
• Character-based User Interface
• テキストベースではなくオブジェクトベース
• パイプラインを流れるのはオブジェクト
• 豊富なコマンドレット
• PowerShell 本体で用意されているコマンドレット
• Windows Server OS や役割 / 機能に付随するコマンドレット
• 特定の製品やサービスに付随するコマンドレット
8
オブジェクトベース
• コマンドレットの入力、出力はオブジェクト
• コンソールに出力する際は、オブジェクトを文字列に変換している
• パイプラインを流れるのはオブジェクト
• オブジェクトベースなので…
• 一部のプロパティ(列)だけ取り出して加工できる
– アカウントの一覧から “アカウント名” と “最終ログイン日時” だけ取り出す
• プロパティの値を使ってフィルタリングできる
– Windows の役割・機能の一覧から、インストールされているものだけ取り出す
• オブジェクトの状態を操作できる
9
現在の最新版
• PowerShell 4.0
• Windows Server 2012 R2 に標準搭載
• Windows Management Framework 4.0 をインストールすることで、
他の OS でも利用可能
– Windows 7 SP1, Windows Server 2008 R2 SP1, Windows Server 2012
– .NET Framework 4.5 が必要
• PowerShell 5.0 Preview May 2014
• with Windows Management Framework 5.0
– http://www.microsoft.com/en-us/download/details.aspx?id=42936
• includes OneGet, PowerShellGet, and Network Switch
10
基本事項のおさらい
• PowerShell 実行環境
• 演算子
• リダイレクト
• 変数とスコープ
• ヒアドキュメント
• 条件分岐
• 繰り返し
11
PowerShell 実行環境
• PowerShell (PowerShell コンソール)
• powershell.exe
• 通常の PowerShell 環境
• PowerShell ISE (Integrated Scripting Environment)
• powershell_ise.exe
• スクリプト作成 / デバッグ用の環境
– ブレークポイントの設定
– スクリプトの一部を選択して実行 (選択範囲を実行)
12
演算子
• 算術演算子(about_Arithmetic_Operators)
• +, -, *, /, %
• 代入演算子(about_Assignment_Operators)
• =, +=, -=, *=, /=, %=
• 比較演算子(about_Comparison_Operators)
• -eq, -ne, -gt, -lt, -le, -ge, -match, -notmatch, -replace,
-like, -notlike, -in, -notin, -contains, -notcontains,
-bAND, -bOR, -bXOR, -bNOT
• 論理演算子(about_Logical_Operators)
• -and, -or, -xor, -not, !
13
演算子
• リダイレクト演算子(about_Redirection)
• 後述
• 分割/結合演算子(about_Split / about_Join)
• -split, -join
• 型演算子(about_Type_Operators)
• -is, -isnot, -as
• 単項演算子(about_Operators)
• $a++, $a—
• 特殊演算子(about_Operators)
• @(), [], &, |, .., ::, etc...
14
リダイレクト
• リダイレクト演算子
• ストリームの出力先を変更
> 標準ストリームをファイルに保存(既存ファイルは上書き)
>> 標準ストリームをファイルに保存(既存ファイルに追記)
2> エラーストリームをファイルに保存(既存ファイルは上書き)
2>> エラーストリームをファイルに保存(既存ファイルに追記)
2>&1 エラーストリームを標準ストリームと同じ場所へ出力
• ストリーム番号
– 2:エラー 3:警告 4:詳細 5:デバッグ
• 出力文字コードは UTF-16 になるので注意
– 文字コードを変換しつつ出力する場合は、Out-File 等を利用
15
変数とスコープ
• 変数:値を格納するための場所(入れ物)
• $ を先頭に付ける
• 参照可能な範囲(スコープ)がある
– 関数内、ブロック内、スクリプト内で宣言された変数は、原則として外部から
は参照できない
– 可能な限りグローバル変数は使用しない
• 変数のスコープ
• グローバル:どこからでも参照可能
• スクリプト:同一スクリプト内であれば参照可能
• (ローカル):同一ブロックまたは子ブロック内であれば参照可能
• プライベート:同一ブロック内のみ参照可能
16
Demo 01
変数とスコープ
• ドットソース形式での読み込み
• スクリプト内の変数をグローバル変数として取り込む
• . <ScriptPath>
• 変数初期化(定義)用のファイルを分割したい場合等に利用可能
• 通常のスクリプトファイルに対しては使用しない方が良い
– グローバル変数を無暗に増やさない
• 不要な変数がある場合やグローバル変数が競合する場合は、削除する
– Remove-Variable
17
Demo 02
ヒアドキュメント
• スクリプト内に文字列を埋め込むことが可能
• @’
<複数行文字列>
‘@
• @’ の直後に改行が必須
• 主に、テスト時や簡単なスクリプトで使用
• スクリプトに埋め込むことになるので、保守性が悪い
• 本格的に運用(使用)する場合は、外部ファイルから読み込む
18
Demo 03
条件分岐
• if ... elseif ... Else
• if (条件式1) { 条件式1を満たす時の処理 }
elseif (条件式2) { 条件式2を満たす時の処理 }
...
elseif (条件式n) { 条件式nを満たす時の処理 }
else { 条件式1..nを満たさなかった時の処理 }
• switch ステートメント
• switch (チェック対象) {
対象となる値1 { チェック対象が値1の時の処理 ; break ; }
...
対象となる値n { チェック対象が値nの時の処理 ; break ; }
default { チェック対象が1..nの何れでもない時の処理 }
}
19
繰り返し
• while ステートメント
• 条件を満たすまでループし続ける
• do ... while ステートメント
• 条件を満たすまでループし続ける
• for ステートメント
• インデックス(番号)付きで n 回(n 個)繰り返す
• foreach ステートメント
• 集合(コレクション)の要素それぞれに対して処理を行う(名前付き)
• Foreach-Object (%)
• 集合(コレクション)の要素それぞれに対して処理を行う(自動変数)
20
スクリプトを実行するための事前準備
• スクリプトの実行を許可する
• とりあえずスクリプトを作成するコンピューター上で以下を実行
– Set-ExecutionPolicy RemoteSigned
• PowerShell Remoting を有効化する
• リモート接続が必要な場合は以下を実行 (検証環境向け)
– 接続先 : Enable-PSRemoting -Force
– 接続元 : Set-Item WSMan:¥localhost¥Client¥TrustedHosts -Value *
• 詳細は後述
21
Set-ExecutionPolicy
22
Enable-PSRemoting
23
スクリプトを作成する
24
PowerShell スクリプト
• スクリプトファイル
• 基本的に、コンソール上で実行する場合と同様のコマンドを記述
– 必要な処理(コマンドレット等)を列挙
• 人が考えてコマンド実行していた部分は、条件分岐やフィルタ、
エラー処理等として記述
• ps1 ファイルとして保存
– UTF-8 を推奨
• PowerShell ホストを介してスクリプトを実行
– PowerShell Console 上からスクリプトファイルを実行
– powershell.exe 起動時にスクリプトファイルを指定して実行
25
スクリプトに記述する処理
• やりたいことを実現するための処理
• データ(操作対象)を取得
• データ(操作対象)から不要なものを除外(フィルタリング)
• 残った項目(必要なもの)それぞれに対して処理を実行
+
• スクリプトの動作をサポートする処理
• エラーハンドリング
• 外部の状態に応じて処理を実行
• 結果の通知 / ロギング
• 認証情報の取得・保持
• リモート接続・リモート処理
26
スクリプトの記述レベル
• 実行時の状況に合ったスクリプトを作成、記述する
• システムが自動で実行する(人の手を介さない)
– 途中で止まらない(入力待ちにならない)
– 最後まで正しく実行される、あるいは途中で正しく止まる
– 処理内容・処理結果を後から追跡できる
• 一般ユーザーが実行する
– 分かり易いメッセージを出力する(あるいは、何も出力しない)
– 実行方法、実行形式をミスしても問題が起きないようにする
• 作成者以外の IT 管理者が実行する
• 作成者のみが利用する
– 後からメンテナンスできるよう最低限コメントを記載する
– (場合によっては)エラー処理は考慮しない
27
やりたいことを実現するための処理
• 処理の基本
• 取得(入力)して、抽出して、処理(または出力)する
• 複数のコマンドレット、関数等の間で、対象(オブジェクト)を受け渡す
• オブジェクトの受け渡し
• 引数として入力し、出力を次のコマンドの引数へ渡す
– $a = <Cmdlet1>
– <Cmdlet2> $a
• パイプラインを使用する
– <Cmdlet1> | <Cmdlet2>
28
パイプラインの処理
• <Cmdlet1> | <Cmdlet2> | <Cmdlet3>
• Cmdlet1 の出力オブジェクト全体が Cmdlet2 に渡されるわけではない
• Cmdlet1 の出力がコレクション(配列)の場合
1. <Cmdlet1> の出力の一つ目のオブジェクトが <Cmdlet2> に渡される
2. <Cmdlet2> は一つ目のオブジェクトを処理し、<Cmdlet3> へ渡す
3. <Cmdlet3> でも一つ目のオブジェクトが処理される
4. 上記を、すべてのオブジェクトに対して実行
※はじめは、あまり気にしなくても OK
29
Demo 04
Foreach-Object
• パイプラインの中での繰り返し処理
• 通常は Foreach-Object を使用
• エイリアスは %, foreach
– foreach ステートメントと混同しないように注意
• オブジェクトの配列を受け取り、各要素に処理<scriptblock>を実行
– Foreach-Object <scriptblock>
– <scriptblock>のなかでは、自動変数 $_ に各オブジェクトが設定される
30
Demo 05
データ(オブジェクト)の取得
• 操作対象となるオブジェクトを取得する
• オブジェクト、またはオブジェクトの集合(配列、コレクション、etc...)
• 専用のコマンドレットで取得
• Get-ADUser, Get-WindowsFeature, etc...
• 汎用のコマンドレットで取得
• Get-Item, Get-ItemProperty, etc...
• ファイルから読み込み
• Import-CSV, [xml](Get-Content)
• 自力でデータソースにアクセスして取得
31
ファイルの読み込み
• テキストファイルとして読み込む
• Get-Content –Path <path>
• 1行を1文字列として、文字列の配列を取得
• CSVとして読み込む
• Import-CSV –Path <path>
[-Encoding <Encode>] [-Delimiter <Delimiter>]
• エンコードは極力指定する
– ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF32, UTF7, UTF8
• デリミタ(区切り文字)は、必要に応じて指定する
– デフォルトはカンマ “,”
32
Demo 06
ファイルから読み込む
• XMLとして読み込む
• [xml](Get-Content –Path <path>)
• 文字列から XML オブジェクト(XMLDocument)を生成
33
Demo 07
フィルタリング
• オブジェクトを抽出する(絞り込む)
• 通常は Where-Object(?)を使用
– Where-Object <scriptblock>
– <scriptblock> が $true となるオブジェクトのみを抽出
• ? { $_.Name –eq “suzuki” } ? { $_.Installed }
• ? Name –eq “suzuki” ? Installed
– 同じフィルタ(条件)を多用するのであれば、filter を作成したほうが良い
• 先頭または末尾から抽出する
– Select-Object -First <N>
– Select-Object -Last <N>
• オブジェクトの順序を並び替える
– Sort-Object
34
ファイルへ出力(保存)
• テキストファイルへ出力
• Out-File <path> [-Encoding <Encode>] [-Append]
• 追記する場合は -Append スイッチを使用
• リダイレクトは文字コードを指定できないため、通常はこちらを使用
• CSV ファイルへ出力
• Export-CSV –Path <path> [-Encoding <Encode>] [-Append]
• オブジェクトのプロパティを CSV 形式で出力
35
その他の出力
• Out-Null
• パイプラインから渡されたオブジェクトを捨てる(UNIX の /dev/null)
• Out-String
• パイプラインから渡されたオブジェクトを文字列に変換する
• Write-Host
• 指定されたオブジェクトを Console へ出力する
• パイプラインには何も出力されない
• Write-Output
• 指定されたオブジェクトを標準ストリーム(パイプライン)へ出力する
36
エラーハンドリング
• スクリプト実行時、エラーが発生する要因はたくさんある
• ディスク容量不足
• ネットワーク切断
• 通信先のサービスダウン
• 日付、時刻、起動時間(起動後経過時間)
• スクリプトの不具合(仕様・実装)
• 処理に失敗しても致命的な状態にならないことが重用
• 破壊的な操作を記述する場合は十分にチェックする
– 破壊的な操作:対象の状態を変更する操作(追加、削除、データ変更等)
– 非破壊的な操作:対象の状態を変更しない操作(何度実行しても影響がない)
37
エラーメッセージを出力する
• エラーとしてメッセージを出力する
• Write-Error
• 標準エラーストリームへ出力される
• エラー扱いとなる($ErrorActionPreference の影響を受ける)
• エラーの他にも出力可能
• Write-Warning ストリーム 3 へ出力
• Write-Verbose ストリーム 4 へ出力
• Write-Debug ストリーム 5 へ出力
38
エラー発生時の動作
• エラー発生時
• デフォルトではスクリプトの実行を継続しようとする
– スクリプト実行環境として継続が可能な場合
• $ErrorActionPreference の値により制御される
– SilentlyContinue: エラーメッセージを抑止して継続
– Continue : エラーメッセージを出力して継続
– Stop : 実行を停止
– Inquire : 実行を継続するかユーザーに確認(プロンプト表示)
• 共通パラメータ : -ErrorAction
– 基本的に、全てのコマンドレットでサポートされるパラメータ
– -ErorAction を設定すると $ErrorActionPreference の動作を上書きできる
39
Demo 08
エラーの内容を参照する
• 自動変数 : $Error
• これまでに発生したエラーが保存されている(ArrayList)
– $Error[0] : もっとも直近のエラー
– $Error[1] : 一つ前のエラー
…
– $Error[-1] : 一番古いエラー(一番最初に発生したエラー)
• 共通パラメータ : -ErrorVariable
• 該当のコマンドレット内で発生したエラーを保存する変数を指定可能
• 後からエラーの内容を参照する可能性がある場合は、明示的に別の変数へ
入れておいた方が処理が楽になる(かもしれない)
40
Demo 09
エラー発生時に処理を実行(例外処理)
• trap
• エラーが発生した際に、trap ブロック内の処理を実行
• 処理を実行した後は、エラー発生箇所に戻って処理を再開
– trap が記述されているスコープと同じスコープの後続処理から実行
• continue キーワード
– trap した際にエラー出力を抑止する
• break キーワード
– 後続処理を実行しない(処理を停止する)
41
Demo 10
エラー発生時に処理を実行(例外処理)
• try ... catch ... finally
• try ブロック内のエラーを捕捉し、処理を実行
• catch するエラーオブジェクトを指定可能
– エラーオブジェクトの種類ごとに処理を記述できる
• finally ブロックで後処理が可能
– finally ブロックは、エラーが発生したかどうかに関係なく実行される
• 構造化されており、trap よりもスコープが明確
42
Demo 11
外部の状態に応じて処理を実行
• スクリプト外の処理状態に応じて、処理を実行する
• 別のスクリプトが出力したファイルを利用する
• OS やサービス等の状態に応じて処理を実行する
• 待ち合わせる方法
• 特定の状態になるまで、スクリプト内部でチェックしながら待つ
– コマンドレットによっては -Wait パラメータを利用可能
• 繰り返しタスクとしてスクリプトを登録し、特定の状態のときのみ処理を
実行する
• イベントハンドラを登録し、イベントをトリガーに実行する
• 外部の処理を含めた処理全体をワークフローとして記述する
43
イベントによる制御
• イベント
• オブジェクトの状態変化
• イベントトリガーで処理を実施
• イベントのサブスクライブを行うことで、イベントが発生した際に通知を
受け取ることが可能
• 特定のイベントが発生した際に実行する処理を、イベントハンドラとして
登録
• 例えば
• 特定のフォルダーにファイルが配置されたら処理を行う
• 特定のプロセスがダウンしたら処理を行う
44
Demo 12
通知
• メールで通知
• Send-MailMessage コマンドレットを使用
• 送信用の SMTP サーバーが別途必要
• イベントログに出力
• Write-EventLog コマンドレットを使用
• イベントソースの指定が必要
– 既存のイベントソースを流用する
– 事前に、スクリプト用のイベントソースを登録する
45
イベントログへ出力
• イベントソースを登録
• New-EventLog -LogName <LogName> -Source <SourceName>
– 既存の <LogName> を指定すると、<SourceName> が登録される
– 存在しない <LogName> を指定すると、新規にイベントログを作成する
• 場合によっては管理者権限が必要
• イベントログの出力
• Write-EventLog -LogName <LogName> -EntryType <Type>
-Source <SourceName> -EventId <N>
-Message <Message>
• <Type> は Error, Warning, Information, SuccessAudit, FailureAudit
46
Demo 13
認証情報の取得・保存
• 認証情報の取得
• Get-Credential でプロンプトから取得
• ユーザー名とパスワードから PSCredential オブジェクトを生成
• PSCredential 内のパスワード
• System.Security.SecureString として保持
• ファイルに保存する場合は、Convert が必要
– ConvertFrom-SecureString
– ConvertTo-SecureString
– ファイルのアクセス権に注意
• 実行ユーザーが変わる場合は注意
• 実行ユーザーは生パスワードを取得可能
47
Demo 14
リモート接続・リモート処理
• New-PSSession
• Credential 等を指定して、新規のセッションを作成(確立)する
• Invoke-Command
• New-PSSession で作成したセッションを使用してコマンドを実行する
– -Session パラメータ
• Invoke-Command で直接セッションを確立して実行することも可能
– Invoke-Command の終了時、セッションも終了する
– 同一のセッションを再利用したい場合は、New-PSSession を使用する
48
実行環境の差異に注意する
• 作成環境と実行環境は同一とは限らない
• OS のバージョンが異なるVersion
• PowerShell(WMF)のバージョンが異なる
• インストールされている PowerShell モジュールが異なる
• インストールされている外部コマンドが異なる
• etc...
• 異なる環境で実行される可能性を考慮する
• 実行環境(PowerShell Version)を制限する
• 複数の環境で動作するようスクリプトを記述する
• リソースのチェックやエラー制御を適切に行う
49
Demo 15
実行可能な環境を制限する
• 特定の PowerShell バージョンを要求する
• #requires –version <version>
50
Demo 16
バージョンを判定し動作を分ける
• PowerShell のバージョンを判定する
• $PSVersionTable.PSVersion(PowerShell 2.0 以降)
• PowerShell 1.0 は $PSVersionTable が存在しない
• OS のバージョンを判定する
• Get-WmiObject Win32_OperatingSystem
• [System.Environment]::OSVersion
51
Demo 17
ストリクトモード
• ストリクトモードを設定する
• Set-StrictMode –Version Latest
• Version 2.0 (現在の Latest)
– 初期化されていない変数の参照禁止
– 存在しないプロパティのアクセス禁止
– メソッド形式での関数呼び出し禁止
– 名前なし変数の禁止
• オフにする場合
– Set-StrictMode –Off
• 設定したスコープ(と子スコープ)のみ有効
• http://technet.microsoft.com/ja-jp/library/hh849692.aspx
52
スクリプトの動作を確認する
53
作成したスクリプトの動作確認
• PowerShell ISE 上で実行する
• スクリプト全体を実行
• 範囲を選択して実行
• ブレークポイントの設定とブレークポイントでの停止 / 再開
• ステップ実行
• コンソールと ISE では、一部動作 (挙動) が異なる
• 外部コマンドの呼び出し制約
– $psUnsupportedConsoleApplications
• OS と WMF のバージョンの組み合わせによっては、コマンドの出力結果
54
Demo 18
デバッグ情報の出力
• トレースレベルの設定
• Set-PSDebug -Trace <N>
– 0 : トレース無効
– 1 : 実行されるスクリプトの各行をトレース
– 2 : スクリプト行、変数の代入、関数呼び出し、スクリプトをトレース
• 自動変数
• $DebugPreference と $DebugPreference
• 共通パラメータ
• -Debug と -Verbose
55
スクリプトを展開する
56
スクリプトの実行許可
• スクリプトの実行やコンフィグレーションのロード
• 実行ポリシー (Execution Policy) によって制御される
• 既定値では、スクリプトの実行が禁止されている
– Windows Server 2012 R2 以外
• 実行ポリシーの確認と変更
• Get-ExecutionPolicy / Set-ExecutionPolicy
• グループポリシーによる設定
– コンピューターポリシー / ユーザーポリシー
• PowerShell 起動時のオプションで指定
– powershell.exe -ExecutionPolicy <Policy>
57
実行ポリシー
• 実行ポリシーは以下の 6 種類 (5 段階 + “未定義”)
• Restricted : スクリプトの実行を禁止する
• AllSigned : 有効な署名付きのスクリプトのみ実行可能
• RemoteSigned : ローカルのスクリプトは無条件に実行可能
リモートから取得したスクリプトには署名が必要
• Unrestricted : スクリプトは実行可能 (一部警告表示あり)
• Bypass : スクリプトは実行可能 (警告表示なし)
• Undefined : 未定義
• 規定値は Undefined
• Windows Server 2012 R2 のみ RemoteSigned (LocalMachine Scope)
• 全てのスコープで Undefined の場合、Restricted とみなされる
58
実行ポリシーのスコープ
• 実行ポリシーはスコープごとに設定可能
• MachinePolicy : グループポリシーによる設定 (Computer)
• UserPolicy : グループポリシーによる設定 (User)
• Process : 実行中の PowerShell セッション内のみ有効
• CurrentUser : ログインユーザーの設定 (レジストリに格納)
• LocalMachine : ローカルコンピューターの設定 (レジストリに格納)
• 上位スコープの設定が優先される
• 基本的には管理者権限で設定を行う
• Process / CurrentUser スコープは一般ユーザー権限で設定変更可能
• LocalMachine スコープでスクリプト実行を禁止していても、Process ス
コープで実行を許可することで、一時的なスクリプトの実行が可能
59
リモート接続の構成
• リモート コンピューターへ接続して操作を行う
• WS-Management を使用してリモートコンピューターの WinRM
(Windows Remote Management) サービスへ接続する
• 事前にリモート接続の構成が必要
– Windows Server 2012 R2 では、同一セグメントからのリモート接続が
デフォルトで許可されている
• とりあえず接続したい場合は以下を実行 (検証環境向け)
– 接続先 : Enable-PSRemoting -Force
– 接続元 : Set-Item WSMan:¥localhost¥Client¥TrustedHosts -Value *
– 本番環境へ適用する際は、設定の意味を理解してセキュリティを考慮する
• Get-Help about_Remote
– http://technet.microsoft.com/en-us/library/hh847900.aspx
60
リモート接続の要件
• リモート接続の要件を満たすようコンピューターを構成する
• WinRM サービスが起動している
• WinRM のエンドポイントが適切に構成されている
• Windows Firewall やその他の Firewall 製品で通信が許可されている
– ネットワークロケーションがパブリック ネットワークの場合、PowerShell の
バージョン / OS によって Enable-PSRemoting の挙動が異なるので注意
• 接続先コンピューターの Administrators グループに所属しているか、
権限が適切に構成されている
• 接続先に対する資格情報の送信が許可されている
– ドメインに参加しているか、TrustedHosts が適切に構成されている
• Get-Help about_Remote_Requirements
– http://technet.microsoft.com/en-us/library/hh847859.aspx
61
リモート接続時の注意点
• PowerShell のバージョンによりセッションの扱いが異なる
• PowerShell 2.0 / WinRM 2.0 では接続元側でセッション情報を保持
• PowerShell 3.0 / WinRM 3.0 以降は接続先側でセッション情報を保持
– セッションを切断し、別の接続元から同一のセッションへ再接続が可能
• トラブルが少ない構成
• ドメイン環境
• Domain Admins グループのユーザーを使用
• WMF (Windows Management Framework) 3.0
(PowerShell 3.0 / WinRM 3.0) 以降を使用
62
実行方法
• ユーザーが任意に実行
• スクリプトファイルを powershell.exe から実行
• 登録されたタスクを手動実行
• 決められた時刻に自動実行(スケジュールタスク)
• タスクスケジューラに登録
• 特定の状態に変化したら実行(イベント)
• イベントトリガーで実行
63
タスクスケジューラからスクリプトを実行
• タスクスケジューラにタスクを登録
• 実行するコマンド(実行ファイル)は powershell.exe
• -Command “<script path>” を指定
• 実行ユーザーに注意する
• スクリプト内の処理を実行する権限があるか
– 特権モード、所属グループ、NTFS ACL、委任、etc...
• 保存された Credential を使用する場合は、実行ユーザーで Credential が
保存されているか
• 実行環境(プロファイル)に問題はないか
– プロファイル、UAC、etc...
64
Azure の操作を自動化
• Azure サービスのコントロール
• Azure PowerShell を使用
• 仮想マシン内の OS のコントロールは、通常の OS と同様
• サービスコントロール用の認証情報
• Add-AzureAccount ではなく、Get-AzurePublishSettingsFile を使う
– Azure Active Directory 認証ではなく、証明書認証
– Azure AD の認証は 12 時間で Expire するので注意
– 証明書であれば、証明書の有効期限(かつ、サブスクリプションの有効期限)
まで利用可能
65
Azure の操作を自動化
• Azure AD で認証されている状態
66
Azure の操作を自動化
• 証明書が登録されている状態
67
Tips
68
単位変換
• バイトの単位
• KB, MB, GB, TB, PB がキーワードとして登録されている
– 1KB : 1024
– 1MB : 1048576
– 1GB : 1073741824
– 1TB : 1099511627776
– 1PB : 1125899906842624
• 大文字、小文字は区別されない
– 1KB = 1kB = 1Kb = 1kb = 1024
• EB, ZB, YB は変換できない
69
文法やコマンドレットの確認
• 困ったときはヘルプを見る
• Get-Help about_*
• Get-Help <Cmdlet> -Full
• 使えそうなコマンドがないか調べる
• Get-Command
• <Cmdlet> | Get-Member
• <Cmdlet>.GetType()
70
まとめ
• PowerShell によるスクリプト作成は難しくない
• スクリプトの利用用途を考慮して、記述レベルを検討する
• 破壊的な捜査を行う前には必ずチェックする
• エラー処理は必要に応じて実施する
• 困ったらとりあえず動かしてみる(検証環境で)
71
参考資料
• Scripting with Windows PowerShell(TechNet)
• http://technet.microsoft.com/en-us/library/bb978526.aspx
• Windows PowerShell によるWindows Server 管理の
自動化 v4.0 2014.03.13 更新版(安納さん)
• http://www.slideshare.net/junichia/windows-powershell-30-
windows-server-2012
• Windows PowerShell ポケットリファレンス(牟田口さん)
• http://gihyo.jp/book/2013/978-4-7741-5542-5
※TechNet は英語版のページを参照しましょう
72
73
Q & A
ご清聴ありがとうございました
74
Thank You!

More Related Content

What's hot

[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIRedmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIGo Maeda
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -MITSUNARI Shigeo
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 (  Redmine of one plant 2022 ...ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 (  Redmine of one plant 2022 ...
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...Kohei Nakamura
 
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門Goでこれどうやるの? 入門
Goでこれどうやるの? 入門zaru sakuraba
 
View Customize Pluginで出来ること
View Customize Pluginで出来ることView Customize Pluginで出来ること
View Customize Pluginで出来ることonozaty
 
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれいまさら聞けないselectあれこれ
いまさら聞けないselectあれこれlestrrat
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
Fluentdで本番環境を再現
Fluentdで本番環境を再現Fluentdで本番環境を再現
Fluentdで本番環境を再現Hiroshi Toyama
 

What's hot (20)

[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
What’s new in cloud run 2021 後期
What’s new in cloud run 2021 後期What’s new in cloud run 2021 後期
What’s new in cloud run 2021 後期
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
Microsoft 365 Day Session 5
Microsoft 365 Day Session 5Microsoft 365 Day Session 5
Microsoft 365 Day Session 5
 
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIRedmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 (  Redmine of one plant 2022 ...ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 (  Redmine of one plant 2022 ...
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
 
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門Goでこれどうやるの? 入門
Goでこれどうやるの? 入門
 
View Customize Pluginで出来ること
View Customize Pluginで出来ることView Customize Pluginで出来ること
View Customize Pluginで出来ること
 
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれいまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Fluentdで本番環境を再現
Fluentdで本番環境を再現Fluentdで本番環境を再現
Fluentdで本番環境を再現
 

Viewers also liked

04 windows powershellスクリプト作成の基礎知識
04 windows powershellスクリプト作成の基礎知識04 windows powershellスクリプト作成の基礎知識
04 windows powershellスクリプト作成の基礎知識s_hayashi
 
PowerShell DSC と Linux
PowerShell DSC と LinuxPowerShell DSC と Linux
PowerShell DSC と LinuxKazuki Takai
 
Vb script power_shellでメール送信
Vb script power_shellでメール送信Vb script power_shellでメール送信
Vb script power_shellでメール送信Naoyuki Sano
 
PowerShell 5.0 & Security
PowerShell 5.0 & SecurityPowerShell 5.0 & Security
PowerShell 5.0 & SecurityKazuki Takai
 
開発者のためのActive Directory講座
開発者のためのActive Directory講座開発者のためのActive Directory講座
開発者のためのActive Directory講座junichi anno
 
安全なデータ公開のために
安全なデータ公開のために 安全なデータ公開のために
安全なデータ公開のために Wakamatz
 
会社でPowershell
会社でPowershell会社でPowershell
会社でPowershellkobexr
 
Exchange Onlineの階層型アドレス帳の設定事例
Exchange Onlineの階層型アドレス帳の設定事例Exchange Onlineの階層型アドレス帳の設定事例
Exchange Onlineの階層型アドレス帳の設定事例Shu Yamada
 
Windows Server Essentials用PowerShell コマンドレットを使ってみよう!
Windows Server Essentials用PowerShell コマンドレットを使ってみよう!Windows Server Essentials用PowerShell コマンドレットを使ってみよう!
Windows Server Essentials用PowerShell コマンドレットを使ってみよう!Satoru Nasu
 
PowerShell 5.0 JEA (Just Enough Administration) First Step
PowerShell 5.0 JEA (Just Enough Administration) First StepPowerShell 5.0 JEA (Just Enough Administration) First Step
PowerShell 5.0 JEA (Just Enough Administration) First StepKazuki Takai
 
社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう
社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう
社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おうSatoru Nasu
 
5 (2교시) '15년 용접세미나(강재별 용접특성-박홍원)-150506
5 (2교시) '15년 용접세미나(강재별 용접특성-박홍원)-1505065 (2교시) '15년 용접세미나(강재별 용접특성-박홍원)-150506
5 (2교시) '15년 용접세미나(강재별 용접특성-박홍원)-150506topshock
 
ライセンスを理解してますか?知っておきたいWordPressとGPLライセンス
ライセンスを理解してますか?知っておきたいWordPressとGPLライセンスライセンスを理解してますか?知っておきたいWordPressとGPLライセンス
ライセンスを理解してますか?知っておきたいWordPressとGPLライセンスJun Nogata
 
Ingles español - diccionario técnico
Ingles español - diccionario técnicoIngles español - diccionario técnico
Ingles español - diccionario técnicoMARMAYA
 
[네이버 D2SF] R&D Fund 2016년 3차_사업소개
[네이버 D2SF] R&D Fund 2016년 3차_사업소개[네이버 D2SF] R&D Fund 2016년 3차_사업소개
[네이버 D2SF] R&D Fund 2016년 3차_사업소개NAVER D2 STARTUP FACTORY
 
[D2SF] Naver 오픈 API 가이드
[D2SF] Naver 오픈 API 가이드[D2SF] Naver 오픈 API 가이드
[D2SF] Naver 오픈 API 가이드NAVER D2 STARTUP FACTORY
 
[Tutorial] Diccionario de Naver (Español)
[Tutorial] Diccionario de Naver (Español)[Tutorial] Diccionario de Naver (Español)
[Tutorial] Diccionario de Naver (Español)Nadhia Olivos
 
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理するHyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理するjunichi anno
 
F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업NAVER D2
 

Viewers also liked (20)

04 windows powershellスクリプト作成の基礎知識
04 windows powershellスクリプト作成の基礎知識04 windows powershellスクリプト作成の基礎知識
04 windows powershellスクリプト作成の基礎知識
 
PowerShell DSC と Linux
PowerShell DSC と LinuxPowerShell DSC と Linux
PowerShell DSC と Linux
 
Vb script power_shellでメール送信
Vb script power_shellでメール送信Vb script power_shellでメール送信
Vb script power_shellでメール送信
 
PowerShell 5.0 & Security
PowerShell 5.0 & SecurityPowerShell 5.0 & Security
PowerShell 5.0 & Security
 
開発者のためのActive Directory講座
開発者のためのActive Directory講座開発者のためのActive Directory講座
開発者のためのActive Directory講座
 
安全なデータ公開のために
安全なデータ公開のために 安全なデータ公開のために
安全なデータ公開のために
 
会社でPowershell
会社でPowershell会社でPowershell
会社でPowershell
 
Exchange Onlineの階層型アドレス帳の設定事例
Exchange Onlineの階層型アドレス帳の設定事例Exchange Onlineの階層型アドレス帳の設定事例
Exchange Onlineの階層型アドレス帳の設定事例
 
Korea internet & Search Engine Market
Korea internet & Search Engine MarketKorea internet & Search Engine Market
Korea internet & Search Engine Market
 
Windows Server Essentials用PowerShell コマンドレットを使ってみよう!
Windows Server Essentials用PowerShell コマンドレットを使ってみよう!Windows Server Essentials用PowerShell コマンドレットを使ってみよう!
Windows Server Essentials用PowerShell コマンドレットを使ってみよう!
 
PowerShell 5.0 JEA (Just Enough Administration) First Step
PowerShell 5.0 JEA (Just Enough Administration) First StepPowerShell 5.0 JEA (Just Enough Administration) First Step
PowerShell 5.0 JEA (Just Enough Administration) First Step
 
社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう
社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう
社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう
 
5 (2교시) '15년 용접세미나(강재별 용접특성-박홍원)-150506
5 (2교시) '15년 용접세미나(강재별 용접특성-박홍원)-1505065 (2교시) '15년 용접세미나(강재별 용접특성-박홍원)-150506
5 (2교시) '15년 용접세미나(강재별 용접특성-박홍원)-150506
 
ライセンスを理解してますか?知っておきたいWordPressとGPLライセンス
ライセンスを理解してますか?知っておきたいWordPressとGPLライセンスライセンスを理解してますか?知っておきたいWordPressとGPLライセンス
ライセンスを理解してますか?知っておきたいWordPressとGPLライセンス
 
Ingles español - diccionario técnico
Ingles español - diccionario técnicoIngles español - diccionario técnico
Ingles español - diccionario técnico
 
[네이버 D2SF] R&D Fund 2016년 3차_사업소개
[네이버 D2SF] R&D Fund 2016년 3차_사업소개[네이버 D2SF] R&D Fund 2016년 3차_사업소개
[네이버 D2SF] R&D Fund 2016년 3차_사업소개
 
[D2SF] Naver 오픈 API 가이드
[D2SF] Naver 오픈 API 가이드[D2SF] Naver 오픈 API 가이드
[D2SF] Naver 오픈 API 가이드
 
[Tutorial] Diccionario de Naver (Español)
[Tutorial] Diccionario de Naver (Español)[Tutorial] Diccionario de Naver (Español)
[Tutorial] Diccionario de Naver (Español)
 
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理するHyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
 
F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업
 

Similar to IT Pro のための PowerShell スクリプティング

Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
170622 02
170622 02170622 02
170622 02openrtm
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...Insight Technology, Inc.
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキングTakayuki Kondou
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発Mitsuru Katoh
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門Sho A
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセスMakoto Kato
 
PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理Kazuki Takai
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようずOda Shinsuke
 
運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回Shigeharu Yamaoka
 
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Tetsu Yama
 
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)Tetsu Yama
 
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)Tetsu Yama
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話terurou
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤Sotaro Kimura
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationyukihiro kawada
 
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...Insight Technology, Inc.
 

Similar to IT Pro のための PowerShell スクリプティング (20)

Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
170622 02
170622 02170622 02
170622 02
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回
 
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
 
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)
 
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤
 
Clrh 110827 wfho
Clrh 110827 wfhoClrh 110827 wfho
Clrh 110827 wfho
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
 
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
 

More from Kazuki Takai

Azure Arc Automanage Machine Configuration による構成の管理と適用
Azure Arc Automanage Machine Configuration による構成の管理と適用Azure Arc Automanage Machine Configuration による構成の管理と適用
Azure Arc Automanage Machine Configuration による構成の管理と適用Kazuki Takai
 
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築Kazuki Takai
 
Azure Arc Jumpstart Update - HCIBox Edition
Azure Arc Jumpstart Update - HCIBox EditionAzure Arc Jumpstart Update - HCIBox Edition
Azure Arc Jumpstart Update - HCIBox EditionKazuki Takai
 
ArcBox のおさらいと最新情報
ArcBox のおさらいと最新情報ArcBox のおさらいと最新情報
ArcBox のおさらいと最新情報Kazuki Takai
 
Arc 対応サーバーへの SSH アクセス
Arc 対応サーバーへの SSH アクセスArc 対応サーバーへの SSH アクセス
Arc 対応サーバーへの SSH アクセスKazuki Takai
 
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...Kazuki Takai
 
Insight into Azure Active Directory - Azure AD Custom Role & Scope
Insight into Azure Active Directory - Azure AD Custom Role & ScopeInsight into Azure Active Directory - Azure AD Custom Role & Scope
Insight into Azure Active Directory - Azure AD Custom Role & ScopeKazuki Takai
 
最近の PowerShell について
最近の PowerShell について最近の PowerShell について
最近の PowerShell についてKazuki Takai
 
Windows Server 2022 Datacenter Azure Edition Overview
Windows Server 2022 Datacenter Azure Edition OverviewWindows Server 2022 Datacenter Azure Edition Overview
Windows Server 2022 Datacenter Azure Edition OverviewKazuki Takai
 
Past and Future of PowerShell
Past and Future of PowerShellPast and Future of PowerShell
Past and Future of PowerShellKazuki Takai
 
Introducing Windows Terminal
Introducing Windows TerminalIntroducing Windows Terminal
Introducing Windows TerminalKazuki Takai
 
Recap: Windows Server 2019 Failover Clustering
Recap: Windows Server 2019 Failover ClusteringRecap: Windows Server 2019 Failover Clustering
Recap: Windows Server 2019 Failover ClusteringKazuki Takai
 
使ってみよう PowerShell
使ってみよう PowerShell使ってみよう PowerShell
使ってみよう PowerShellKazuki Takai
 
5分で分かる Windows Server 2019 HCI 超概要
5分で分かる Windows Server 2019 HCI 超概要5分で分かる Windows Server 2019 HCI 超概要
5分で分かる Windows Server 2019 HCI 超概要Kazuki Takai
 
Application Platform としての Windows Server 2019
Application Platform としての Windows Server 2019Application Platform としての Windows Server 2019
Application Platform としての Windows Server 2019Kazuki Takai
 
Windows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみるWindows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみるKazuki Takai
 
Getting started with Windows Containers
Getting started with Windows ContainersGetting started with Windows Containers
Getting started with Windows ContainersKazuki Takai
 
Recap: PowerShell Core
Recap: PowerShell CoreRecap: PowerShell Core
Recap: PowerShell CoreKazuki Takai
 
Windows とコンテナの話
Windows とコンテナの話Windows とコンテナの話
Windows とコンテナの話Kazuki Takai
 

More from Kazuki Takai (20)

Azure Arc Automanage Machine Configuration による構成の管理と適用
Azure Arc Automanage Machine Configuration による構成の管理と適用Azure Arc Automanage Machine Configuration による構成の管理と適用
Azure Arc Automanage Machine Configuration による構成の管理と適用
 
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
 
Azure Arc Jumpstart Update - HCIBox Edition
Azure Arc Jumpstart Update - HCIBox EditionAzure Arc Jumpstart Update - HCIBox Edition
Azure Arc Jumpstart Update - HCIBox Edition
 
ArcBox のおさらいと最新情報
ArcBox のおさらいと最新情報ArcBox のおさらいと最新情報
ArcBox のおさらいと最新情報
 
Arc 対応サーバーへの SSH アクセス
Arc 対応サーバーへの SSH アクセスArc 対応サーバーへの SSH アクセス
Arc 対応サーバーへの SSH アクセス
 
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
 
Insight into Azure Active Directory - Azure AD Custom Role & Scope
Insight into Azure Active Directory - Azure AD Custom Role & ScopeInsight into Azure Active Directory - Azure AD Custom Role & Scope
Insight into Azure Active Directory - Azure AD Custom Role & Scope
 
最近の PowerShell について
最近の PowerShell について最近の PowerShell について
最近の PowerShell について
 
Windows Server 2022 Datacenter Azure Edition Overview
Windows Server 2022 Datacenter Azure Edition OverviewWindows Server 2022 Datacenter Azure Edition Overview
Windows Server 2022 Datacenter Azure Edition Overview
 
Azure Arc 概要
Azure Arc 概要Azure Arc 概要
Azure Arc 概要
 
Past and Future of PowerShell
Past and Future of PowerShellPast and Future of PowerShell
Past and Future of PowerShell
 
Introducing Windows Terminal
Introducing Windows TerminalIntroducing Windows Terminal
Introducing Windows Terminal
 
Recap: Windows Server 2019 Failover Clustering
Recap: Windows Server 2019 Failover ClusteringRecap: Windows Server 2019 Failover Clustering
Recap: Windows Server 2019 Failover Clustering
 
使ってみよう PowerShell
使ってみよう PowerShell使ってみよう PowerShell
使ってみよう PowerShell
 
5分で分かる Windows Server 2019 HCI 超概要
5分で分かる Windows Server 2019 HCI 超概要5分で分かる Windows Server 2019 HCI 超概要
5分で分かる Windows Server 2019 HCI 超概要
 
Application Platform としての Windows Server 2019
Application Platform としての Windows Server 2019Application Platform としての Windows Server 2019
Application Platform としての Windows Server 2019
 
Windows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみるWindows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみる
 
Getting started with Windows Containers
Getting started with Windows ContainersGetting started with Windows Containers
Getting started with Windows Containers
 
Recap: PowerShell Core
Recap: PowerShell CoreRecap: PowerShell Core
Recap: PowerShell Core
 
Windows とコンテナの話
Windows とコンテナの話Windows とコンテナの話
Windows とコンテナの話
 

Recently uploaded

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 

Recently uploaded (7)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 

IT Pro のための PowerShell スクリプティング

  • 1. Cloud OS MVP Roadshow 2014 年 6 月 Cloud OS Tech Day! IT Pro のための PowerShell スクリプティング 高井 一輝 System Center User Group Japan
  • 2. 自己紹介 • 高井 一輝 (Takai Kazuki) • 某 ISP 勤務 • クラウドとオンプレミスを組み合わせたインテグレーション • 見積り、提案書の作成から設計、構築、試験、運用まで • ネットワーク、サーバ (Windows、Linux) • System Center User Group Japan (SCUGJ) • Twitter : @zhuky7 / Facebook : kazuki.takai • Blog : http://operationslab.wordpress.com/ 2
  • 3. 本日の内容 • お話すること • PowerShell についてのおさらい – スクリプトを記述するうえで必要となる内容 – スクリプトを実行するために必要となる内容 • スクリプトでやりたいことを実現するためのパーツ • スクリプトを作成するうえで注意すべきこと • お話しないこと • PowerShell コマンドレットの実行方法 • PowerShell Remoting の仕組み • PowerShell Workflow • 個々の製品の具体的な管理方法 3
  • 4. このセッションのゴール • 簡単な PowerShell スクリプトを作成できる • 目的に応じてスクリプトを作成できる • スクリプトの実行、運用ができる 4
  • 5. 本日の環境 • Windows 7 Professional with WMF 4.0 • Windows Server 2012 R2 5
  • 6. アジェンダ • Windows PowerShell の基礎 • スクリプトを作成する • スクリプトの動作を確認する • スクリプトを展開する 6
  • 8. PowerShell とは • Windows で利用可能な新しいシェル / スクリプト言語 • Windows Server 2008 R2 以降で標準搭載 • コマンドプロンプトよりも高度な処理 / 制御が可能 • WSH よりもスクリプトの記述が容易 • Character-based User Interface • テキストベースではなくオブジェクトベース • パイプラインを流れるのはオブジェクト • 豊富なコマンドレット • PowerShell 本体で用意されているコマンドレット • Windows Server OS や役割 / 機能に付随するコマンドレット • 特定の製品やサービスに付随するコマンドレット 8
  • 9. オブジェクトベース • コマンドレットの入力、出力はオブジェクト • コンソールに出力する際は、オブジェクトを文字列に変換している • パイプラインを流れるのはオブジェクト • オブジェクトベースなので… • 一部のプロパティ(列)だけ取り出して加工できる – アカウントの一覧から “アカウント名” と “最終ログイン日時” だけ取り出す • プロパティの値を使ってフィルタリングできる – Windows の役割・機能の一覧から、インストールされているものだけ取り出す • オブジェクトの状態を操作できる 9
  • 10. 現在の最新版 • PowerShell 4.0 • Windows Server 2012 R2 に標準搭載 • Windows Management Framework 4.0 をインストールすることで、 他の OS でも利用可能 – Windows 7 SP1, Windows Server 2008 R2 SP1, Windows Server 2012 – .NET Framework 4.5 が必要 • PowerShell 5.0 Preview May 2014 • with Windows Management Framework 5.0 – http://www.microsoft.com/en-us/download/details.aspx?id=42936 • includes OneGet, PowerShellGet, and Network Switch 10
  • 11. 基本事項のおさらい • PowerShell 実行環境 • 演算子 • リダイレクト • 変数とスコープ • ヒアドキュメント • 条件分岐 • 繰り返し 11
  • 12. PowerShell 実行環境 • PowerShell (PowerShell コンソール) • powershell.exe • 通常の PowerShell 環境 • PowerShell ISE (Integrated Scripting Environment) • powershell_ise.exe • スクリプト作成 / デバッグ用の環境 – ブレークポイントの設定 – スクリプトの一部を選択して実行 (選択範囲を実行) 12
  • 13. 演算子 • 算術演算子(about_Arithmetic_Operators) • +, -, *, /, % • 代入演算子(about_Assignment_Operators) • =, +=, -=, *=, /=, %= • 比較演算子(about_Comparison_Operators) • -eq, -ne, -gt, -lt, -le, -ge, -match, -notmatch, -replace, -like, -notlike, -in, -notin, -contains, -notcontains, -bAND, -bOR, -bXOR, -bNOT • 論理演算子(about_Logical_Operators) • -and, -or, -xor, -not, ! 13
  • 14. 演算子 • リダイレクト演算子(about_Redirection) • 後述 • 分割/結合演算子(about_Split / about_Join) • -split, -join • 型演算子(about_Type_Operators) • -is, -isnot, -as • 単項演算子(about_Operators) • $a++, $a— • 特殊演算子(about_Operators) • @(), [], &, |, .., ::, etc... 14
  • 15. リダイレクト • リダイレクト演算子 • ストリームの出力先を変更 > 標準ストリームをファイルに保存(既存ファイルは上書き) >> 標準ストリームをファイルに保存(既存ファイルに追記) 2> エラーストリームをファイルに保存(既存ファイルは上書き) 2>> エラーストリームをファイルに保存(既存ファイルに追記) 2>&1 エラーストリームを標準ストリームと同じ場所へ出力 • ストリーム番号 – 2:エラー 3:警告 4:詳細 5:デバッグ • 出力文字コードは UTF-16 になるので注意 – 文字コードを変換しつつ出力する場合は、Out-File 等を利用 15
  • 16. 変数とスコープ • 変数:値を格納するための場所(入れ物) • $ を先頭に付ける • 参照可能な範囲(スコープ)がある – 関数内、ブロック内、スクリプト内で宣言された変数は、原則として外部から は参照できない – 可能な限りグローバル変数は使用しない • 変数のスコープ • グローバル:どこからでも参照可能 • スクリプト:同一スクリプト内であれば参照可能 • (ローカル):同一ブロックまたは子ブロック内であれば参照可能 • プライベート:同一ブロック内のみ参照可能 16 Demo 01
  • 17. 変数とスコープ • ドットソース形式での読み込み • スクリプト内の変数をグローバル変数として取り込む • . <ScriptPath> • 変数初期化(定義)用のファイルを分割したい場合等に利用可能 • 通常のスクリプトファイルに対しては使用しない方が良い – グローバル変数を無暗に増やさない • 不要な変数がある場合やグローバル変数が競合する場合は、削除する – Remove-Variable 17 Demo 02
  • 18. ヒアドキュメント • スクリプト内に文字列を埋め込むことが可能 • @’ <複数行文字列> ‘@ • @’ の直後に改行が必須 • 主に、テスト時や簡単なスクリプトで使用 • スクリプトに埋め込むことになるので、保守性が悪い • 本格的に運用(使用)する場合は、外部ファイルから読み込む 18 Demo 03
  • 19. 条件分岐 • if ... elseif ... Else • if (条件式1) { 条件式1を満たす時の処理 } elseif (条件式2) { 条件式2を満たす時の処理 } ... elseif (条件式n) { 条件式nを満たす時の処理 } else { 条件式1..nを満たさなかった時の処理 } • switch ステートメント • switch (チェック対象) { 対象となる値1 { チェック対象が値1の時の処理 ; break ; } ... 対象となる値n { チェック対象が値nの時の処理 ; break ; } default { チェック対象が1..nの何れでもない時の処理 } } 19
  • 20. 繰り返し • while ステートメント • 条件を満たすまでループし続ける • do ... while ステートメント • 条件を満たすまでループし続ける • for ステートメント • インデックス(番号)付きで n 回(n 個)繰り返す • foreach ステートメント • 集合(コレクション)の要素それぞれに対して処理を行う(名前付き) • Foreach-Object (%) • 集合(コレクション)の要素それぞれに対して処理を行う(自動変数) 20
  • 21. スクリプトを実行するための事前準備 • スクリプトの実行を許可する • とりあえずスクリプトを作成するコンピューター上で以下を実行 – Set-ExecutionPolicy RemoteSigned • PowerShell Remoting を有効化する • リモート接続が必要な場合は以下を実行 (検証環境向け) – 接続先 : Enable-PSRemoting -Force – 接続元 : Set-Item WSMan:¥localhost¥Client¥TrustedHosts -Value * • 詳細は後述 21
  • 25. PowerShell スクリプト • スクリプトファイル • 基本的に、コンソール上で実行する場合と同様のコマンドを記述 – 必要な処理(コマンドレット等)を列挙 • 人が考えてコマンド実行していた部分は、条件分岐やフィルタ、 エラー処理等として記述 • ps1 ファイルとして保存 – UTF-8 を推奨 • PowerShell ホストを介してスクリプトを実行 – PowerShell Console 上からスクリプトファイルを実行 – powershell.exe 起動時にスクリプトファイルを指定して実行 25
  • 26. スクリプトに記述する処理 • やりたいことを実現するための処理 • データ(操作対象)を取得 • データ(操作対象)から不要なものを除外(フィルタリング) • 残った項目(必要なもの)それぞれに対して処理を実行 + • スクリプトの動作をサポートする処理 • エラーハンドリング • 外部の状態に応じて処理を実行 • 結果の通知 / ロギング • 認証情報の取得・保持 • リモート接続・リモート処理 26
  • 27. スクリプトの記述レベル • 実行時の状況に合ったスクリプトを作成、記述する • システムが自動で実行する(人の手を介さない) – 途中で止まらない(入力待ちにならない) – 最後まで正しく実行される、あるいは途中で正しく止まる – 処理内容・処理結果を後から追跡できる • 一般ユーザーが実行する – 分かり易いメッセージを出力する(あるいは、何も出力しない) – 実行方法、実行形式をミスしても問題が起きないようにする • 作成者以外の IT 管理者が実行する • 作成者のみが利用する – 後からメンテナンスできるよう最低限コメントを記載する – (場合によっては)エラー処理は考慮しない 27
  • 28. やりたいことを実現するための処理 • 処理の基本 • 取得(入力)して、抽出して、処理(または出力)する • 複数のコマンドレット、関数等の間で、対象(オブジェクト)を受け渡す • オブジェクトの受け渡し • 引数として入力し、出力を次のコマンドの引数へ渡す – $a = <Cmdlet1> – <Cmdlet2> $a • パイプラインを使用する – <Cmdlet1> | <Cmdlet2> 28
  • 29. パイプラインの処理 • <Cmdlet1> | <Cmdlet2> | <Cmdlet3> • Cmdlet1 の出力オブジェクト全体が Cmdlet2 に渡されるわけではない • Cmdlet1 の出力がコレクション(配列)の場合 1. <Cmdlet1> の出力の一つ目のオブジェクトが <Cmdlet2> に渡される 2. <Cmdlet2> は一つ目のオブジェクトを処理し、<Cmdlet3> へ渡す 3. <Cmdlet3> でも一つ目のオブジェクトが処理される 4. 上記を、すべてのオブジェクトに対して実行 ※はじめは、あまり気にしなくても OK 29 Demo 04
  • 30. Foreach-Object • パイプラインの中での繰り返し処理 • 通常は Foreach-Object を使用 • エイリアスは %, foreach – foreach ステートメントと混同しないように注意 • オブジェクトの配列を受け取り、各要素に処理<scriptblock>を実行 – Foreach-Object <scriptblock> – <scriptblock>のなかでは、自動変数 $_ に各オブジェクトが設定される 30 Demo 05
  • 31. データ(オブジェクト)の取得 • 操作対象となるオブジェクトを取得する • オブジェクト、またはオブジェクトの集合(配列、コレクション、etc...) • 専用のコマンドレットで取得 • Get-ADUser, Get-WindowsFeature, etc... • 汎用のコマンドレットで取得 • Get-Item, Get-ItemProperty, etc... • ファイルから読み込み • Import-CSV, [xml](Get-Content) • 自力でデータソースにアクセスして取得 31
  • 32. ファイルの読み込み • テキストファイルとして読み込む • Get-Content –Path <path> • 1行を1文字列として、文字列の配列を取得 • CSVとして読み込む • Import-CSV –Path <path> [-Encoding <Encode>] [-Delimiter <Delimiter>] • エンコードは極力指定する – ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF32, UTF7, UTF8 • デリミタ(区切り文字)は、必要に応じて指定する – デフォルトはカンマ “,” 32 Demo 06
  • 33. ファイルから読み込む • XMLとして読み込む • [xml](Get-Content –Path <path>) • 文字列から XML オブジェクト(XMLDocument)を生成 33 Demo 07
  • 34. フィルタリング • オブジェクトを抽出する(絞り込む) • 通常は Where-Object(?)を使用 – Where-Object <scriptblock> – <scriptblock> が $true となるオブジェクトのみを抽出 • ? { $_.Name –eq “suzuki” } ? { $_.Installed } • ? Name –eq “suzuki” ? Installed – 同じフィルタ(条件)を多用するのであれば、filter を作成したほうが良い • 先頭または末尾から抽出する – Select-Object -First <N> – Select-Object -Last <N> • オブジェクトの順序を並び替える – Sort-Object 34
  • 35. ファイルへ出力(保存) • テキストファイルへ出力 • Out-File <path> [-Encoding <Encode>] [-Append] • 追記する場合は -Append スイッチを使用 • リダイレクトは文字コードを指定できないため、通常はこちらを使用 • CSV ファイルへ出力 • Export-CSV –Path <path> [-Encoding <Encode>] [-Append] • オブジェクトのプロパティを CSV 形式で出力 35
  • 36. その他の出力 • Out-Null • パイプラインから渡されたオブジェクトを捨てる(UNIX の /dev/null) • Out-String • パイプラインから渡されたオブジェクトを文字列に変換する • Write-Host • 指定されたオブジェクトを Console へ出力する • パイプラインには何も出力されない • Write-Output • 指定されたオブジェクトを標準ストリーム(パイプライン)へ出力する 36
  • 37. エラーハンドリング • スクリプト実行時、エラーが発生する要因はたくさんある • ディスク容量不足 • ネットワーク切断 • 通信先のサービスダウン • 日付、時刻、起動時間(起動後経過時間) • スクリプトの不具合(仕様・実装) • 処理に失敗しても致命的な状態にならないことが重用 • 破壊的な操作を記述する場合は十分にチェックする – 破壊的な操作:対象の状態を変更する操作(追加、削除、データ変更等) – 非破壊的な操作:対象の状態を変更しない操作(何度実行しても影響がない) 37
  • 38. エラーメッセージを出力する • エラーとしてメッセージを出力する • Write-Error • 標準エラーストリームへ出力される • エラー扱いとなる($ErrorActionPreference の影響を受ける) • エラーの他にも出力可能 • Write-Warning ストリーム 3 へ出力 • Write-Verbose ストリーム 4 へ出力 • Write-Debug ストリーム 5 へ出力 38
  • 39. エラー発生時の動作 • エラー発生時 • デフォルトではスクリプトの実行を継続しようとする – スクリプト実行環境として継続が可能な場合 • $ErrorActionPreference の値により制御される – SilentlyContinue: エラーメッセージを抑止して継続 – Continue : エラーメッセージを出力して継続 – Stop : 実行を停止 – Inquire : 実行を継続するかユーザーに確認(プロンプト表示) • 共通パラメータ : -ErrorAction – 基本的に、全てのコマンドレットでサポートされるパラメータ – -ErorAction を設定すると $ErrorActionPreference の動作を上書きできる 39 Demo 08
  • 40. エラーの内容を参照する • 自動変数 : $Error • これまでに発生したエラーが保存されている(ArrayList) – $Error[0] : もっとも直近のエラー – $Error[1] : 一つ前のエラー … – $Error[-1] : 一番古いエラー(一番最初に発生したエラー) • 共通パラメータ : -ErrorVariable • 該当のコマンドレット内で発生したエラーを保存する変数を指定可能 • 後からエラーの内容を参照する可能性がある場合は、明示的に別の変数へ 入れておいた方が処理が楽になる(かもしれない) 40 Demo 09
  • 41. エラー発生時に処理を実行(例外処理) • trap • エラーが発生した際に、trap ブロック内の処理を実行 • 処理を実行した後は、エラー発生箇所に戻って処理を再開 – trap が記述されているスコープと同じスコープの後続処理から実行 • continue キーワード – trap した際にエラー出力を抑止する • break キーワード – 後続処理を実行しない(処理を停止する) 41 Demo 10
  • 42. エラー発生時に処理を実行(例外処理) • try ... catch ... finally • try ブロック内のエラーを捕捉し、処理を実行 • catch するエラーオブジェクトを指定可能 – エラーオブジェクトの種類ごとに処理を記述できる • finally ブロックで後処理が可能 – finally ブロックは、エラーが発生したかどうかに関係なく実行される • 構造化されており、trap よりもスコープが明確 42 Demo 11
  • 43. 外部の状態に応じて処理を実行 • スクリプト外の処理状態に応じて、処理を実行する • 別のスクリプトが出力したファイルを利用する • OS やサービス等の状態に応じて処理を実行する • 待ち合わせる方法 • 特定の状態になるまで、スクリプト内部でチェックしながら待つ – コマンドレットによっては -Wait パラメータを利用可能 • 繰り返しタスクとしてスクリプトを登録し、特定の状態のときのみ処理を 実行する • イベントハンドラを登録し、イベントをトリガーに実行する • 外部の処理を含めた処理全体をワークフローとして記述する 43
  • 44. イベントによる制御 • イベント • オブジェクトの状態変化 • イベントトリガーで処理を実施 • イベントのサブスクライブを行うことで、イベントが発生した際に通知を 受け取ることが可能 • 特定のイベントが発生した際に実行する処理を、イベントハンドラとして 登録 • 例えば • 特定のフォルダーにファイルが配置されたら処理を行う • 特定のプロセスがダウンしたら処理を行う 44 Demo 12
  • 45. 通知 • メールで通知 • Send-MailMessage コマンドレットを使用 • 送信用の SMTP サーバーが別途必要 • イベントログに出力 • Write-EventLog コマンドレットを使用 • イベントソースの指定が必要 – 既存のイベントソースを流用する – 事前に、スクリプト用のイベントソースを登録する 45
  • 46. イベントログへ出力 • イベントソースを登録 • New-EventLog -LogName <LogName> -Source <SourceName> – 既存の <LogName> を指定すると、<SourceName> が登録される – 存在しない <LogName> を指定すると、新規にイベントログを作成する • 場合によっては管理者権限が必要 • イベントログの出力 • Write-EventLog -LogName <LogName> -EntryType <Type> -Source <SourceName> -EventId <N> -Message <Message> • <Type> は Error, Warning, Information, SuccessAudit, FailureAudit 46 Demo 13
  • 47. 認証情報の取得・保存 • 認証情報の取得 • Get-Credential でプロンプトから取得 • ユーザー名とパスワードから PSCredential オブジェクトを生成 • PSCredential 内のパスワード • System.Security.SecureString として保持 • ファイルに保存する場合は、Convert が必要 – ConvertFrom-SecureString – ConvertTo-SecureString – ファイルのアクセス権に注意 • 実行ユーザーが変わる場合は注意 • 実行ユーザーは生パスワードを取得可能 47 Demo 14
  • 48. リモート接続・リモート処理 • New-PSSession • Credential 等を指定して、新規のセッションを作成(確立)する • Invoke-Command • New-PSSession で作成したセッションを使用してコマンドを実行する – -Session パラメータ • Invoke-Command で直接セッションを確立して実行することも可能 – Invoke-Command の終了時、セッションも終了する – 同一のセッションを再利用したい場合は、New-PSSession を使用する 48
  • 49. 実行環境の差異に注意する • 作成環境と実行環境は同一とは限らない • OS のバージョンが異なるVersion • PowerShell(WMF)のバージョンが異なる • インストールされている PowerShell モジュールが異なる • インストールされている外部コマンドが異なる • etc... • 異なる環境で実行される可能性を考慮する • 実行環境(PowerShell Version)を制限する • 複数の環境で動作するようスクリプトを記述する • リソースのチェックやエラー制御を適切に行う 49 Demo 15
  • 50. 実行可能な環境を制限する • 特定の PowerShell バージョンを要求する • #requires –version <version> 50 Demo 16
  • 51. バージョンを判定し動作を分ける • PowerShell のバージョンを判定する • $PSVersionTable.PSVersion(PowerShell 2.0 以降) • PowerShell 1.0 は $PSVersionTable が存在しない • OS のバージョンを判定する • Get-WmiObject Win32_OperatingSystem • [System.Environment]::OSVersion 51 Demo 17
  • 52. ストリクトモード • ストリクトモードを設定する • Set-StrictMode –Version Latest • Version 2.0 (現在の Latest) – 初期化されていない変数の参照禁止 – 存在しないプロパティのアクセス禁止 – メソッド形式での関数呼び出し禁止 – 名前なし変数の禁止 • オフにする場合 – Set-StrictMode –Off • 設定したスコープ(と子スコープ)のみ有効 • http://technet.microsoft.com/ja-jp/library/hh849692.aspx 52
  • 54. 作成したスクリプトの動作確認 • PowerShell ISE 上で実行する • スクリプト全体を実行 • 範囲を選択して実行 • ブレークポイントの設定とブレークポイントでの停止 / 再開 • ステップ実行 • コンソールと ISE では、一部動作 (挙動) が異なる • 外部コマンドの呼び出し制約 – $psUnsupportedConsoleApplications • OS と WMF のバージョンの組み合わせによっては、コマンドの出力結果 54 Demo 18
  • 55. デバッグ情報の出力 • トレースレベルの設定 • Set-PSDebug -Trace <N> – 0 : トレース無効 – 1 : 実行されるスクリプトの各行をトレース – 2 : スクリプト行、変数の代入、関数呼び出し、スクリプトをトレース • 自動変数 • $DebugPreference と $DebugPreference • 共通パラメータ • -Debug と -Verbose 55
  • 57. スクリプトの実行許可 • スクリプトの実行やコンフィグレーションのロード • 実行ポリシー (Execution Policy) によって制御される • 既定値では、スクリプトの実行が禁止されている – Windows Server 2012 R2 以外 • 実行ポリシーの確認と変更 • Get-ExecutionPolicy / Set-ExecutionPolicy • グループポリシーによる設定 – コンピューターポリシー / ユーザーポリシー • PowerShell 起動時のオプションで指定 – powershell.exe -ExecutionPolicy <Policy> 57
  • 58. 実行ポリシー • 実行ポリシーは以下の 6 種類 (5 段階 + “未定義”) • Restricted : スクリプトの実行を禁止する • AllSigned : 有効な署名付きのスクリプトのみ実行可能 • RemoteSigned : ローカルのスクリプトは無条件に実行可能 リモートから取得したスクリプトには署名が必要 • Unrestricted : スクリプトは実行可能 (一部警告表示あり) • Bypass : スクリプトは実行可能 (警告表示なし) • Undefined : 未定義 • 規定値は Undefined • Windows Server 2012 R2 のみ RemoteSigned (LocalMachine Scope) • 全てのスコープで Undefined の場合、Restricted とみなされる 58
  • 59. 実行ポリシーのスコープ • 実行ポリシーはスコープごとに設定可能 • MachinePolicy : グループポリシーによる設定 (Computer) • UserPolicy : グループポリシーによる設定 (User) • Process : 実行中の PowerShell セッション内のみ有効 • CurrentUser : ログインユーザーの設定 (レジストリに格納) • LocalMachine : ローカルコンピューターの設定 (レジストリに格納) • 上位スコープの設定が優先される • 基本的には管理者権限で設定を行う • Process / CurrentUser スコープは一般ユーザー権限で設定変更可能 • LocalMachine スコープでスクリプト実行を禁止していても、Process ス コープで実行を許可することで、一時的なスクリプトの実行が可能 59
  • 60. リモート接続の構成 • リモート コンピューターへ接続して操作を行う • WS-Management を使用してリモートコンピューターの WinRM (Windows Remote Management) サービスへ接続する • 事前にリモート接続の構成が必要 – Windows Server 2012 R2 では、同一セグメントからのリモート接続が デフォルトで許可されている • とりあえず接続したい場合は以下を実行 (検証環境向け) – 接続先 : Enable-PSRemoting -Force – 接続元 : Set-Item WSMan:¥localhost¥Client¥TrustedHosts -Value * – 本番環境へ適用する際は、設定の意味を理解してセキュリティを考慮する • Get-Help about_Remote – http://technet.microsoft.com/en-us/library/hh847900.aspx 60
  • 61. リモート接続の要件 • リモート接続の要件を満たすようコンピューターを構成する • WinRM サービスが起動している • WinRM のエンドポイントが適切に構成されている • Windows Firewall やその他の Firewall 製品で通信が許可されている – ネットワークロケーションがパブリック ネットワークの場合、PowerShell の バージョン / OS によって Enable-PSRemoting の挙動が異なるので注意 • 接続先コンピューターの Administrators グループに所属しているか、 権限が適切に構成されている • 接続先に対する資格情報の送信が許可されている – ドメインに参加しているか、TrustedHosts が適切に構成されている • Get-Help about_Remote_Requirements – http://technet.microsoft.com/en-us/library/hh847859.aspx 61
  • 62. リモート接続時の注意点 • PowerShell のバージョンによりセッションの扱いが異なる • PowerShell 2.0 / WinRM 2.0 では接続元側でセッション情報を保持 • PowerShell 3.0 / WinRM 3.0 以降は接続先側でセッション情報を保持 – セッションを切断し、別の接続元から同一のセッションへ再接続が可能 • トラブルが少ない構成 • ドメイン環境 • Domain Admins グループのユーザーを使用 • WMF (Windows Management Framework) 3.0 (PowerShell 3.0 / WinRM 3.0) 以降を使用 62
  • 63. 実行方法 • ユーザーが任意に実行 • スクリプトファイルを powershell.exe から実行 • 登録されたタスクを手動実行 • 決められた時刻に自動実行(スケジュールタスク) • タスクスケジューラに登録 • 特定の状態に変化したら実行(イベント) • イベントトリガーで実行 63
  • 64. タスクスケジューラからスクリプトを実行 • タスクスケジューラにタスクを登録 • 実行するコマンド(実行ファイル)は powershell.exe • -Command “<script path>” を指定 • 実行ユーザーに注意する • スクリプト内の処理を実行する権限があるか – 特権モード、所属グループ、NTFS ACL、委任、etc... • 保存された Credential を使用する場合は、実行ユーザーで Credential が 保存されているか • 実行環境(プロファイル)に問題はないか – プロファイル、UAC、etc... 64
  • 65. Azure の操作を自動化 • Azure サービスのコントロール • Azure PowerShell を使用 • 仮想マシン内の OS のコントロールは、通常の OS と同様 • サービスコントロール用の認証情報 • Add-AzureAccount ではなく、Get-AzurePublishSettingsFile を使う – Azure Active Directory 認証ではなく、証明書認証 – Azure AD の認証は 12 時間で Expire するので注意 – 証明書であれば、証明書の有効期限(かつ、サブスクリプションの有効期限) まで利用可能 65
  • 66. Azure の操作を自動化 • Azure AD で認証されている状態 66
  • 69. 単位変換 • バイトの単位 • KB, MB, GB, TB, PB がキーワードとして登録されている – 1KB : 1024 – 1MB : 1048576 – 1GB : 1073741824 – 1TB : 1099511627776 – 1PB : 1125899906842624 • 大文字、小文字は区別されない – 1KB = 1kB = 1Kb = 1kb = 1024 • EB, ZB, YB は変換できない 69
  • 70. 文法やコマンドレットの確認 • 困ったときはヘルプを見る • Get-Help about_* • Get-Help <Cmdlet> -Full • 使えそうなコマンドがないか調べる • Get-Command • <Cmdlet> | Get-Member • <Cmdlet>.GetType() 70
  • 71. まとめ • PowerShell によるスクリプト作成は難しくない • スクリプトの利用用途を考慮して、記述レベルを検討する • 破壊的な捜査を行う前には必ずチェックする • エラー処理は必要に応じて実施する • 困ったらとりあえず動かしてみる(検証環境で) 71
  • 72. 参考資料 • Scripting with Windows PowerShell(TechNet) • http://technet.microsoft.com/en-us/library/bb978526.aspx • Windows PowerShell によるWindows Server 管理の 自動化 v4.0 2014.03.13 更新版(安納さん) • http://www.slideshare.net/junichia/windows-powershell-30- windows-server-2012 • Windows PowerShell ポケットリファレンス(牟田口さん) • http://gihyo.jp/book/2013/978-4-7741-5542-5 ※TechNet は英語版のページを参照しましょう 72