PowerShell エンジン Exchange コマンドレット 設定情報への

Microsoft On
Windows PowerShell
最新コマンドライン スクリプティング
マイクロソフト株式会社
セッションの内容
Windows PowerShell とは
運用管理のツールとして
ロードマップ
Windows PowerShell 詳細
ツールのご紹介
Windows PowerShell
コマンドラインシェル + スクリプティング言語
• 生産性と管理性の向上
• システム管理の自動化を推進
• 簡単かつこれまでの資産を活用
PowerShell の概要
• 新しい対話型シェルとスクリプティング言語
– .NET Framework 上で動作
– 100以上の組み込みコマンドレット
– .NET を活用した新しいスクリプティング言語
• 「オブジェクト・パイプライン」
– 現在使っているツールも利用可能
– 現在使っている自動化技術 (COM) も利用可能
• 次世代のシステム管理アーキテクチャの基礎
– 今後サーバー製品で利用
PowerShell の特徴 (1)
• 一貫したコマンドレット体系
– 標準的な名前付けパターン
• [動詞]-[名詞] (ex: get-help, get-command, get-member)
– オプション指定
• Cmdlet –param v1 –param2 v1,v2 –flag
– 共通のパラメータ
• -Debug, -ErrorAction, -ErrorVariable, -OutBuffer,
-OutVariable, -Verbose
• -Whatif, -Confirm (副作用がある場合)
– オブジェクトを返す
PowerShell の特徴 (2)
• データへのアクセスを共通化
– ドライブに割り当て
– ドライブレターだけでなく、文字列を使用可
• 実運用レベルのスクリプティング
– パラメータの型、名前の指定、初期化
– スクリプトへのデジタル署名
Exchange Server 2007 の
管理アーキテクチャ
GUI
CLI
セットアップ
WinForm
WinForm
ADO.NET
管理インターフェイス
PowerShell データプロバイダ
PowerShell エンジン
Exchange コマンドレット
設定情報へのアクセス
Process
boundary
MAPI
Store
レジストリ
Active
Directory
Meta
base
例: Exchange Server 2007
利用中のツールの活用
• すでに利用しているツールも続けて使いたい
– PowerShell 内で利用可能
• コマンド (com, exe)
• COM オブジェクト
• ツールが出力するデータを活用
– PowerShell でデータを再利用できるように加工
• PowerShell で安全なテキスト解析
• PowerShell でラップすることで拡張可能
• .NET Framework を直接呼び出せる
必要システム・入手方法
• OS
–
–
–
–
Windows XP SP2
Windows Server 2003 SP1 以降
Windows Vista
Windows Server code-name "Longhorn"
• アーキテクチャ
– 32 bit 版、64 bit 版
• 必要なソフトウェア
– .NET Framework 2.0
• Windows Vista, "Longhorn" Server には同梱
• 入手方法
– ダウンロードセンター
• http://www.microsoft.com/japan/downloads
• "PowerShell" で検索
– ダウンロードページ (英語)
• http://www.microsoft.com/windowsserver2003/technologies/
management/powershell/download.mspx
動作モデル
4 種類の profile ファイルを起動時に実行
全ユーザー、各ユーザー
PowerShell、特定のシェル
スクリプトの起動方法
新規プロセス
powershell foo.ps1
既存プロセスの新規スコープ
Foo.ps1
既存プロセスのカレントスコープ
. Foo.ps1
別プロセスでコマンド実行可能
Get-process
Powershell {Get-process}
探検のためのツール
Get-Help
コマンドレットや言語のドキュメントを表示
Get-Command
コマンドレット、スクリプト、Alias、関数、
フィルター、ネイティブコマンドの
情報を表示
Get-Member
オブジェクトに関する情報を表示
テキスト処理
ファイルや、テキストを返す既存のコマンドの
出力を操作
.NET String クラス
Join, Split, SubString, Trim, Length, …
多くの .NET の型と変換を利用可能
[datetime], [URI], ENUMS, etc
豊富な string オペレーター
+,*, -f, -replace, -match, -like, -eq, -ne, gt, -ge, -lt, -le
暗黙、明示的なキャスト、強制
豊富なユーティリティ
Match-String, foreach, group, select, sort, where
出力と書式
リスト形式、表形式、ワイド、カスタムビューの
フォーマッターが用意されている
Get-Command Format-*
フォーマッターのオプションで、プロパティ、
プロパティセット、プロパティの表現を指定可能
gps |format-table name,id,handlecount
gps |format-table Configuration -auto
gps |format-table name,@{ Label="File";
Expression= {$_.mainmodule.filename} }
gps |format-list name,*size64
XML ファイルでフォーマット拡張を定義
Update-FormatData
My.Format.ps1xml
ドライブ
さまざまなデータストアに、共通のアクセス方法を提供
データストアは「ドライブ」として見える
Filesystem, Registry, Alias, Certs, Env, Functions, Variables, etc
dir
HKLM:\SOFTWARE\Microsoft
「ドライブ」はさまざまな情報を含む名前空間
Item, ChildItem, Content, Property, ACL, etc.
新しいナビゲーションや対話モデル、または alias により
アクセスできる
Get-ChildItem
Get-Cwd
Get-Content
New-item –type directory
dir
cd
type
mkdir
ls
pwd
cat
mkdir
Set-Location
cd
cd
ドライブのアクセス方法
名前を指定して新しいドライブをマウント
New-Drive -Name sys32 -Provider FileSystem
-root c:\windows\system32 -Description "PSH SOURCES"
cd sys32:\drivers
ワイルドカード
Dir *\*\*.doc
Dir [a-f]*[tc]
豊富な共通のアクセス方法
Dir
\logs –Include *.txt –Exclude A* -Recurse -Force
特定のドライブで有効な拡張
Dir Cert: -Recurse –CodeSigning
すべてのドライブでタブ補完
Dir HKLM:\So<TAB>\Mi<TAB> => HLKM:\Software\Microsoft
コマンドレット
標準的なスクリプティング方法
標準的な命名パターン
動詞-名詞(目的語)
共通の文法
Cmdlet –param v1 –param2 v1,v2 –flag
共通のパラメータ
-Debug, -ErrorAction, -ErrorVariable, -OutBuffer,
-OutVariable, -Verbose
-Whatif, -Confirm (副作用がある場合)
戻り値は文字列ではなくオブジェクト
.NET スクリプティング
あらゆる .NET の型が利用可能
.NET オブジェクトの生成
$d=New-Object System.DateTime 2007,4,20
[DateTime] "2007/4/20"
プロパティ、メソッドの確認
[DateTime] "2007/4/20" |Get-Member
[datetime].Getmembers() |where {$_.isStatic} |ft name
プロパティ、メソッドへのアクセス
インスタンス
$d.DayOfWeek
$d.AddMonths(6)
スタティック
[DateTime]::Now
[DateTime]::IsLeapYear(2005)
メソッドは型が最も近いものが選ばれる
キャストでオーバーライド
[DateTime]::IsLeapYear([INT]$x)
オブジェクトユーティリティ
Foreach (foreach-object)
Get-process |foreach {$i = 0} {$i += $_.handles}
{ "Total Handles: $i"}
Group (group-object)
gps |group Company
Measure (measure-object)
gps |Measure
Handles –Sum –Ave –Min –Max
Select (select-object)
gps |Select name,id –expand modules
gps |Sort handles |Select –first 10
Where (where-object)
gps |where {$_.handles –ge 500}
Windows の管理インターフェイス
• WMI: Windows Management Infrastructure
– Windows の多くのシステム情報にアクセス可
能
– 設定の変更も可能
• WS-Management
– システム管理のための Web Service
– HTTP, HTTPS 経由でリモートアクセス
– リモートの WMI にアクセス
WMI
Get-WmiObject
WMI 名前空間とのインターフェイス
Get-WmiObject –list [-Namespace xx]
Get-WmiObject –Class xx –Namespace xx –
Property xxx – Filter xxx –ComputerName
xxx –Credential xxx
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 name |format-table name,
index,path -auto
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")
管理スクリプトの作成
•
•
•
•
•
•
まずシェルで対話的に実験
ユーティリティで結果を結合
動作確認したコマンド類でスクリプト作成
パラメータなどを導入して汎用化
実運用レベルのスクリプトに改良
社内やコミュニティで共有
例: Get-netstat.ps1
$lines = netstat.exe -ano -p TCP
$ps = get-process
foreach ( $line in $lines )
{
$obj = new-object System.Management.Automation.PSObject
$obj.psobject.typenames[0] = "Netstat"
switch -regex ($line) {
("^ TCP") {
$values = $line.trim().split(" ", [StringSplitOptions]::RemoveEmptyEntries)
$obj | add-member noteproperty "proto" $values[0]
$laddr, $lport = $values[1].split(':')
$obj | add-member noteproperty "laddr" $laddr
$obj | add-member noteproperty "lport" ([int]$lport)
$faddr, $fport = $values[2].split(':')
$obj | add-member noteproperty "faddr" $faddr
$obj | add-member noteproperty "fport" ([int]$fport)
$obj | add-member noteproperty "state" $values[3]
$obj | add-member noteproperty "pid" ([int]$values[4])
$pname = ($ps | where {$_.id -eq $values[4]}).name
$obj | add-member noteproperty "pname" $pname
$obj
}
("^ UDP") {
# TCPを参考に実装してみてください
}
}
}
エラー処理・デバッグ
例外の取り扱い
trap
throw
トレース、デバッグ
$error (ErrorRecord)
set-psdebug [-Trace 0..2] [-Step] [-Off]
セキュリティ
セキュリティのレベルでモード設定可能
制限つき (オペレーターモード)
対話形式のみ
スクリプトは実行できない
署名
スクリプトは、信頼された発行元による
署名が必要
リモートの署名
"インターネットゾーン" のスクリプトは
信頼された発行元による署名が必要
無制限
すべてのスクリプトを実行可能
リモートのスクリプトについては常に警告
シェルの拡張
シェルへの組み込み
独自のコマンドレットを静的にリンクし
新しいシェル実行形式を作成
スナップイン
汎用のシェルに、動的に読み込んで拡張
プロバイダ
ファイルシステムと同様にアクセスできる
独自のプロバイダを作成可能
PowerShell と開発者
開発者が用意するもの
管理用オブジェクトに対する .NET のインターフェイス
シンプルなコマンドレット・プロバイダーで、
高いユーザビリティを提供
PowerShell により
コマンドレット → コマンドラインツール
プロバイダー → ドライブのように容易にアクセス
PowerShell が提供するもの
対話型シェル
強力な言語サポート
コマンドライン ・ COM ・ .NET スクリプティング
共通のパーサー、引数のバリデータ
ユーティリティー ・ フォーマッター
GUI への拡張
MMC 3.0 のスナップインを Managed Code で作成
コマンドレットを呼び出す
パートナー
• PowerGadgets
– http://www.powergadgets.com
– チャート、ゲージ、地図
– サイドバー ガジェット
• /n software inc
– http://www.nsoftware.com/powershell/
– NetCmdlets
– ネットワーク関連のコマンドレット
• SNMP, SSH, LDAP, FTP, Syslog, Jabber, DNS,
MIME, UUEncode, Zip …
• Quest Software, FullArmor …
参考情報
• Windows PowerShell でのスクリプティング
– http://www.microsoft.com/japan/
technet/scriptcenter/hubs/msh.mspx
• TechNet バーチャルラボ
準備中
– http://www.microsoft.com/japan/
technet/traincert/virtuallab/default.mspx
• 製品ページ (英語)
– http://www.microsoft.com/powershell
まとめ
Windows PowerShell は強力な
コマンドラインシェル環境です。
.NET Framework を最大限に活用し、
最小の学習で最大の機能を利用できます。
これからのサーバー製品の基本ツールに
なります。
ぜひ試して、本運用にご活用ください!
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.