More Related Content Similar to Windows PowerShell 2.0 の基礎知識 (20) Windows PowerShell 2.0 の基礎知識4. Windows PowerShell 2.0
• R2/Win7 搭載の PowerShell は 2.0
– 既定で有効、削除不可
– Server Core では既定で無効
• 強化点
– スクリプト言語としての機能強化
– リモーテゖング
– グラフゖカル PowerShell
• ISE: Integrated Scripting Environment
– より高いセキュリテゖ
– R2 の役割管理モジュール
管理の標準ツールへ
4
5. PowerShell 2.0 FAQ
• なぜ今さらコマンドラン?
– 1回きり、1回目の作業は GUI やウゖザードで
– 繰り返し作業、複数のサーバーに対しては PowerShell で
– 定期的なジョブは PowerShell で
– コマンドプロンプト:操作の統一性、テキストベースの入出力、
ツール間の連携性、スクリプテゖングの容易さ
• Windows XP や 2003, Vista, 2008 への対応は?
– ダウンロードセンターにて公開
• http://support.microsoft.com/kb/968929/ja-jp
• XP SP3, Vistat SP1, WS03 SP2, WS08 SP2
• 今後 PowerShell のスキルは必須?
– 必須ではありませんが、かなりラクできます
• VBScript、コマンドプロンプトはなくなるの?
– 引き続きサポートされます
5
6. PowerShell のバージョン
• PowerShell 1.0
– 2006年11月公開
– XP SP2, Windows Server 2003 SP1, Vista: ダウンロード
– Windows Server 2008: 機能の追加
• PowerShell 2.0
– Windows 7, Windows Server 2008 R2 標準装備
• 既定で有効。無効化、削除はできない
• Server Core では既定で無効
• PowerShell 1.0 を置き換え (上位互換)
– その他の OS 向けにダウンロードセンターにて公開
• Windows Server 2003 SP2, Windows Server 2008 SP2
• Windows XP SP3, Windows Vista SP1
• http://support.microsoft.com/kb/968929/ja-jp
• Get-Host でバージョン取得
6
7. まずはここから
• 初回起動
– Windows 7, Windows Server 2008 R2
• ゕクセサリ – Windows PowerShell から起動
• タスクバーにピン止めしておきましょう
• Server Core では機能追加
– Windows XP, Windows Server 2003, 2008
• ダウンロードセンターからダウンロード
• ンストール
• 試してみよう
– CUI, ISE を立ち上げてみる
– Get-help, Get-Command してみる
– Get-help about_* を見てみる
• 設定しよう
– Set-ExecutionPolicy # スクリプトの実行ポリシー
– Notepad $profile # 自動設定プロフゔル
– Set-WSManQuickConfig # リモーテゖングの設定
7
8. Windows PowerShell の特徴 (1)
• 気軽に始められる
– まずは、Get-Help, Get-Command, Get-Member
– Linux/Unix の経験があれば、より身近な操作性
• 一貫したコマンドレット体系
– 標準的な名前付けパターン
• [動詞]-[名詞]
(例: get-help, get-command, get-member)
– パラメーターの指定方法
– 共通のパラメーター
ノンプログラマにも優しいツール
8
9. Windows PowerShell の特徴 (2)
• .NET Framework との強力な連携
– CLR 上で動作
– 戻り値は常に「オブジェクト」
– .NET Framework のクラスを呼び出せる
– 使えば使うほどに効いてくる特長
• データへのゕクセスを共通化
– ドラブに割り当て
– ドラブレターだけでなく、文字列を使用可
• サードパーテゖ、コミュニテゖによるサポート
– スクリプトやツールが充実
高度なニーズにも応えるパワー
9
10. オブジェクトとパプ
• 文字に見えて、単なる文字ではありません。
– 整数、浮動小数点
– 日付、時間
– フゔル情報、プロセス情報…
• 文字ではないので、文字列操作が不要です。
– オブジェクトのプロパテゖとメソッド
– パプにはオブジェクトが流れています
• パプ、プロセス、変数が簡単に扱えます。
– 例:テキストフゔルを読み込んで、変数にセット
– 変数の内容をフゔルに保存
オブジェクトの使いこなしが鍵
10
11. 今までのツールも活用できます
• すでに利用しているツールも続けて使いたい
– PowerShell 内で利用可能
• コマンド (com, exe)
• COM オブジェクト
• ツールが出力するデータを活用
– PowerShell でデータを再利用できるように加工
• PowerShell で安全なテキスト解析
• PowerShell でラップすることで拡張可能
• .NET Framework のクラスを直接呼び出せる
– プログラミングの経験を活用
段階的な移行が可能
11
12. セキュリテゖ
• セキュリテゖのレベルに応じて、スクリプトの実行ポリシーを設定
– Set-ExecutionPolicy, Get-ExecutionPolicy
– 設定の変更には管理者権限が必要
– グループポリシーで設定可能
• 5段階の実行ポリシー
– Restricted: 制限つき (オペレーターモード)
• ンストール時の既定。対話形式のみ、スクリプトは実行できない
– AllSigned: 署名
• スクリプトは、信頼された発行元による署名が必要
– RemoteSigned: リモートの署名
• "ンターネットゾーン" のスクリプトは信頼された発行元による署名が必要
– Unrestricted: 無制限
• すべてのスクリプトを実行可能、リモートのスクリプトについては常に警告
– Bypass: バパス
• すべてのスクリプトを実行可能、警告なし
– Undefined: 設定したポリシーのクリゕ
• スコープ
– MachinePolicy, UserPolicy, Process, CurrentUser, LocalMachine,
データセンターでも安全
12
13. Windows の管理ンターフェス
• WMI: Windows Management Infrastructure
– Windows の多くのシステム情報にゕクセス可能
– 設定の変更も可能
• WS-Management
– システム管理のための Web Service
– HTTP, HTTPS (5985, 5986) 経由でリモートゕクセス
– リモートの WMI にゕクセス
リモート
PowerShell
WS-Man
WMI API WS-Man
HTTP(s) WMI / プロバダ
ローカル 13
14. サーバー管理の新しいスタル
• Windows PowerShell の広がり
– サーバー製品に PowerShell のスナップン
• Exchange Server
– 2007, 2010, Live@Edu
• System Center
– Operations Manager 2007
– Virtual Machine Manager 2007
– Data Protection Manager 2007
• Windows Server 2008 R2
• Windows 7
• Windows Azure
– 複数のスナップンを読み込んでシームレスな管理
• GUI と CUI の連続性
– 1度きりの作業、1回目の作業は GUI (ウゖザード)
– 繰り返し作業、自動化は CUI (スクリプト)
14
15. Exchange Server 2007 の
GUI
管理ゕーキテクチャ
CLI
セットアップ
WinForm WinForm
ADO.NET 管理インターフェイス
PowerShell データプロバイダ
PowerShell エンジン
Exchange コマンドレット
設定情報へのアクセス
MAPI レジストリ Meta
Store Active base
Directory
15
17. 管理スクリプト作成のステップ
• まずシェルで対話的に実験
• ユーテゖリテゖで結果を結合
– パプ、Format-* コマンドレット
– ワンラナー
• 動作確認した一連のコマンドレットをスクリプトに
– Start-Transcript による記録も便利
• 変数、パラメータなどを導入して汎用化
– 関数に書き換え
– $args, param()
– オブジェクトを出力とする、小さなスクリプト
• 実運用レベルのスクリプトに改良
– エラー処理
– ログの作成
– コード署名
• 社内やコミュニテゖで共有
17
20. 多様な実行環境への対応
• どこで、どのように実行されるか
状況に応じて柔軟な対応
– 1台 / 複数台
– 制限環境 / 非制限環境
– ユーザー入力による開始 / ベントによる開始
– ローカル / リモート (1:1, 1:*, *:1)
– 同期 / 非同期
• 主な新機能
– リモート実行
– バックグラウンドジョブ
– ベンテゖング
– 制限実行環境
さまざまな用途シナリオに対応
20
22. GUI と PowerShell
• PowerShell ベースの GUI を簡単に作成可能に
• 主な新機能
– 新しい API
– ランスペースのプール、スレッド制御
– PowerShell ISE (Interated Scripting Environment)
– Out-GridView
実行エンジンとして PowerShell を活用
22
23. サーバーの役割と機能への対応
• Windows Server 2008 R2
サーバーの運用管理に本格的に活用
– Active Directory
– グループポリシー
– Server Manager
– IIS
– リモートデスクトップサービス
– フェールオーバークラスタリング
– Best Practices
– その他…
共通管理基盤としての PowerShell
23
24. Windows Server 2008 R2 では
• 役割や機能の管理に積極的に利用
– 直接・間接の利用
• それぞれモジュールとして提供
– $PSHOME¥Modules
• GUI はコマンドレットを呼び出す形へ
管理スタルが変わっていきます
24
25. 新しい管理 UI モデル
管理ツール UI
(例: Active Directory
管理センター)
自動化
プラットフォーム
(例: AD コマンドレット)
オブジェクトモデル
(Active Directory)
GUI と CUI で同様の作業が可能に
25
27. Windows 7 では
• 既定で有効、Server と全く同じ環境
• Windows トラブルシューテゖング
プラットフォーム
– トラブルシュートのための共通基盤
– c:¥windows¥diagnostics
クラゕントにも標準搭載
27
28. 管理は Windows 7 から
• リモートサーバー管理ツール
– Remote Server Administration Tools for Windows 7
PowerShell のモジュールも提供
• 複数のサーバー、タスクベースの管理
• ヘッドレス管理へ
日常の管理作業はクラゕントからリモートで
28
29. コミュニテゖ
• CodePlex で Windows PowerShell 関連の開発プロジェクトが
進行中
– CodePlex: http://www.codeplex.com
– タグ名 “PowerShell” で検索
– PowerShell Community Extensions
• http://www.codeplex.com/PowerShellCX
• フゔルの圧縮、クリップボードへのゕクセス、ゕセンブリの取扱いなどの
コマンドレット
• ゕセンブリキャッシュ、LDAP、IE7のRSSフゖードにゕクセスするプロバダ
• その他ユーテゖリテゖ関数、フゖルター
– PowerShell Remoting
• http://www.codeplex.com/powershellremoting
• クラゕント・サーバー型のリモートシェル
– Windows Installer PowerShell Extensions
• http://www.codeplex.com/psmsi
• MSI フゔルを取り扱う
29
30. パートナー
• PowerGadgets
– http://www.powergadgets.com
– チャート、ゲージ、地図
– サドバー ガジェット
• /n software inc
– http://www.nsoftware.com/powershell/
– NetCmdlets
– ネットワーク関連のコマンドレット
• SNMP, SSH, LDAP, FTP, Syslog, Jabber, DNS,
MIME, UUEncode, Zip …
– PowerShell Server
• Quest Software, FullArmor …
30
33. まとめ
• Windows PowerShell は
ついに運用管理のメンストリームへ
• 開発者、スクリプト開発者にも
応える豊富な機能
• Windows PowerShell を日常管理作業に
ぜひ取り入れてみてください!
33
35. 参考情報
• Windows PowerShell でのスクリプテゖング
– http://www.microsoft.com/japan/
technet/scriptcenter/hubs/msh.mspx
• TechNet バーチャルラボ 「Windows PowerShell 入門」(V1)
– http://www.microsoft.com/japan/
technet/traincert/virtuallab/default.mspx
• TechNet Forum: Windows PowerShell フォーラム
– http://social.technet.microsoft.com/
Forums/ja-JP/powershellja/threads
• 製品ページ
– http://www.microsoft.com/japan/windowsserver2008/
technologies/powershell.mspx 35
36. テキスト処理
• オブジェクトの活用により、テキスト処理が必要な
場面はかなり減少した
• .NET String クラス
– Join, Split, SubString, Trim, Length, …
• 多くの .NET の型と変換を利用可能
– [datetime], [URI], ENUMS, …
• 豊富な string オペレーター
– +, *, -f, -replace, -match, -like, -eq, -ne,
-gt, -ge, -lt, -le
– 暗黙、明示的なキャスト、強制
• 正規表現を使ったマッチング
– Select-String
36
37. 出力と書式
• リスト形式、表形式、ワド、カスタムビューの
フォーマッタが用意されている
– Get-Command Format-*
• フォーマッタのオプションで、プロパテゖ、
プロパテゖセット、プロパテゖの表現を指定可能
– get-process |format-table name,id,handlecount
– get-process |format-table Configuration -auto
– get-process |format-table name,@{ Label="File";
Expression= {$_.mainmodule.filename} }
– get-process |format-list name,*size64
• XML フゔルでフォーマット拡張を定義
– Update-FormatData My.Format.ps1xml
37
38. ドラブ
• さまざまなデータストゕに、共通のゕクセス方法を提供
• データストゕは「ドラブ」として見える
– Filesystem, Registry, Alias, Certs, Env, Functions, Variables, …
– get-childitem HKLM:¥SOFTWARE¥Microsoft
• 「ドラブ」はさまざまな情報を含む名前空間
– Item, ChildItem, Content, Property, ACL, …
• 共通のコマンドレットでゕクセス可能
また alias が既定で設定されている
Get-ChildItem dir ls
Get-Cwd cd pwd
Get-Content type cat
New-item –type directory mkdir mkdir
Set-Location cd cd
38
39. ドラブのゕクセス方法
• ドラブ名、プロバダを指定して新しいドラブをマウント
– new-drive -Name sys32 -Provider FileSystem
-root c:¥windows¥system32 -Description "PSH SOURCES"
– set-location sys32:¥drivers
• ワルドカード
– get-childitem *¥*¥*.doc
– get-childitem [a-f]*[tc]
• さまざまなプロバダで共通のゕクセス方法
– get-childitem ¥logs –Include *.txt –Exclude A* -Recurse -Force
• 特定のプロバダで有効な拡張
– get-childitem Cert: -Recurse –CodeSigning
• すべてのプロバダでタブ補完
– get-childitem HKLM:¥So<TAB>¥Mi<TAB> =>
HLKM:¥Software¥Microsoft
39
40. .NET スクリプテゖング
• すべての .NET の型が利用可能 (ゕセンブリの読み込みが必要な場
合あり)
• .NET オブジェクトの生成
– $d = new-object System.DateTime 2007,4,20
– [DateTime] "2007/4/20"
• プロパテゖ、メソッドの確認
– [DateTime] "2007/4/20" | get-member
– [datetime].Getmembers() | where-object {$_.isStatic}
| format-table name
• プロパテゖ、メソッドへのゕクセス
– プロパテゖ、メソッド
• $d.DayOfWeek
• $d.AddMonths(6)
– スタテゖックメソッド
• [DateTime]::Now
• [Math]::Sqrt(16)
40
41. オブジェクトユーテゖリテゖ
• Foreach-Object (繰り返し)
– get-process |
foreach-object {$i = 0} {$i += $_.handles} { "Total: $i"}
• Group-Object (グループ化)
– get-process | group-object Company
• Measure-Object (集計)
– get-process | measure-object Handles –Sum –Ave –Min –Max
• Select-Object (選択)
– get-process | select-object name,id –expand modules
– get-process | sort-object handles |Select –first 10
• Where-Object (条件抽出)
– get-process | where-object {$_.handles –ge 500}
41
42. WMI
• Get-WmiObject
– WMI 名前空間とのンターフェス
• Get-WmiObject –list [-Namespace xx]
• Get-WmiObject –Class win32_bios
– リモート接続可能
42
43. ログの操作
• ベントログ
– 読み取り
• Get-EventLog
– 書き込み
• System.Diagnostics.EventLog クラスを利用
– $log = New-Object –Type System.Diagnostics.EventLog
-ArgumentList System
$log.source = “日次処理”
$log.WriteEntry(“正常に終了しました”, “Information”)
• エラー時にもベントを書き込み
– ベントにタスクを添付して、復帰処理
• その他のログ
– IIS
• 文字列処理
• LogParser
43
44. COM
• VBScript と同様に管理オブジェクトにゕクセス
• New-Object で COM オブジェクトを作成
– $fso= New-Object -Com Scripting.FileSystemObject
• プロパテゖ、メソッドの確認
– $fso | get-member
• プロパテゖ、メソッドへのゕクセス
– $fso.GetDrive("C:")
– $fso.VolumeName = "System Drive"
• パプでつないで利用
– $word = new-object –ComObject Word.Application
– $word.RecentFiles | sort-object name |
format-table name, index,path -auto
44
45. XML
• XML はネテゖブのデータ型
– $x=[xml]"<a><b><c>TEST</c></b></a>"
• データへのゕクセス方法が用意されている
– $x.a.b.c
• XML のプロパテゖへのゕクセスは PSBase 経由で
– $x.a.PSBase.innerXml
• XML メソッドへのゕクセス
– $x.a.SelectNodes("//c")
45
46. 引数と戻り値
• 名前付き引数、型付き引数
– $args で名前なし、型指定なしの引数
– 関数定義または param 文で引数の名前、型、既定値を設定
– 名前の一部指定でマッチング
– 引数の順序を考えなくてよい
– より安全なスクリプト
• 戻り値
– パプに出力されたものが戻り値になる
– デバッグ情報やユーザーへの情報はコンソールへ
46
47. サンプル (1)
• WMI
– WMI のクラスリストから、文字列 Processor を含むクラスを抽出
• gwmi -l | select-string "Processor“
– CPU の使用率を表示
• gwmi Win32_PerfFormattedData_PerfOS_Processor
– CPU の使用率から、コゕの番号、使用率(%)のみ表示
• gwmi Win32_PerfFormattedData_PerfOS_Processor | format-table
name,PercentProcessorTime –auto
– 上記の出力を HTML に変換
• gwmi Win32_PerfFormattedData_PerfOS_Processor | select
name,PercentProcessorTime | ConvertTo-Html
47
48. サンプル(2)
– IE を COM オブジェクト経由で操作
• $ie = new-object -com internetexplorer.application
• $ie.visible = $true
• $ie.navigate("about:blank")
• $ie.document.body.innertext = "a"
– CPU の使用率を IE に表示させ、1秒ごとに更新
• while($true){$ie.document.body.innerhtml =
(gwmi Win32_PerfFormattedData_PerfOS_Processor | select
name,PercentProcessorTime | ConvertTo-Html ); sleep 1}
48
49. サンプル(3)
• ベントログ
– システムログから最新10件を取得
• Get-EventLog system -Newest 10
– システムログの最新1000件をソースごとに集計し
出現回数でソート
• Get-EventLog system -Newest 1000 |
Group-Object Source | Sort-Object Count
– PowerGadgets (http://powergadgets.com) でグラフ化
• Get-EventLog system -Newest 1000 |
Group-Object Source | Sort-Object Count | Out-Chart
49
50. サンプル(4)
• Excel
– COM オブジェクト経由で操作
• $excel = new-object -com excel.application
• $excel.findfile()
• $excel.worksheets.item(1).cells.item(1,1)
– ExcelPackage で操作(http://www.codeplex.com/ExcelPackage)
• [Reflection.Assembly]::LoadFrom(
"$pwd¥excelpackage.dll") | out-null
• $ep = New-Object
OfficeOpenXml.ExcelPackage (dir vbs2ps.xlsx)
• foreach ($i in 1..5) {$ep.workbook.worksheets[1].Cell($i,1).value}
50
51. サンプル(5)
• フゔルシステム監視
– PS Eventing
(http://www.codeplex.com/PSEventing)
• . .¥eventhandlers.ps1 (ユーテゖリテゖの読み込み)
• .¥filesystemwatcher.ps1
• または
– $fsw = new-object system.io.filesystemwatcher
– $fsw.Path = "c:¥temp“
– $fsw.EnableRaisingEvents = $true
– add-eventhandler (get-variable fsw) changed { param($var,
$name) "changed!" }
– do-events # this will block until ctrl+C is hit
51