PowerShell - Center

Download Report

Transcript PowerShell - Center

Windows PowerShell
最新コマンドライン スクリプティング
マイクロソフト株式会社
IT Pro エバンジェリスト
田辺 茂也
http://blogs.technet.com/stanabe
アジェンダ
資料の内容
PowerShell のご紹介
PowerShell を自動化ツールとしてどのように使う
ことができるか
PowerShell の拡張方法
PowerShell は強力な自動化ツールです
PowerShell により、複雑な作業を柔軟に取り
扱うことができます
PowerShell
次世代の Windows スクリプティング環境
BASH / KSH のようなシェル
Perl / Ruby のようなプログラミング
TCL のような埋め込み
AS400 CL / VMS DCL のような生産指向
ファイルシステムのように、
簡単にデータストアにアクセス
Unix 風の動作モデル
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
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
ドライブ
さまざまなデータストアに、共通のアクセス方法を提供
データストアは「ドライブ」として見える
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 (コマンドレット)
標準的なスクリプティング方法
標準的な命名パターン
動詞-名詞(目的語)
共通の文法
Cmdlet –param v1 –param2 v1,v2 –flag
共通のパラメータ
-Debug, -ErrorAction, -ErrorVariable, -OutBuffer,
-OutVariable, -Verbose
-Whatif, -Confirm (副作用がある場合)
戻り値は文字列ではなくオブジェクト
.Net スクリプティング
あらゆる .NET の型が利用可能
.NET オブジェクトの生成
$d=New-Object System.DateTime 2005,4,20
[DateTime] "4-20-2005“
プロパティ、メソッドの確認
[DateTime] "4-20-2005“ |Get-Member
[datetime].Getmembers() |where {$_.isStatic} |ft name
プロパティ、メソッドへのアクセス
インスタンス
$d.DayOfWeek
$d.AddMonths(6)
スタティック
[DateTime]::Now
[DateTime]::IsLeapYear(2005)
メソッドは型が最も近いものが選ばれる
キャストでオーバーライド [DateTime]::IsLeapYear([INT]$x)
例: 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を参考に実装してみてください
}
}
}
オブジェクトユーティリティ
Foreach {}
gps |foreach {$i = 0} {$i += $_.handles}
{ “Total Handles: $i”}
Group
> gps |group Company
Measure
> gps |Measure
Handles –Sum –Ave –Min –Max
Select
> gps |Select name,id –expand modules
> gps |Sort handles |Select –first 10
Where
> gps |where {$_.handles –ge 500}
WMI
Get-WmiObject
WMI 名前空間とのインターフェイス
Get-WmiObject –list [-Namespace xx]
Get-WmiObject –Class xx –Namespace xx
–Property xxx – Filter xxx –
ComputerName xxx –Credential xxx
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”)
Extensible Type System
型の拡張は XML ファイル内に定義
My.Types.ps1xml
型名は PSTypeNames で定義
$x.PSTypeNames
拡張可能なもの
Aliases, Notes, Properties, Methods, PropertySets,
serialization info
型を更新するコマンド
> Update-TypeData My.Types.ps1xml
出力と書式
リスト形式、表形式、ワイド、カスタムビューの
フォーマッターが用意されている
> 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
エラー処理・デバッグ
例外の取り扱い
trap
throw
トレース、デバッグ
$error (ErrorRecord)
set-psdebug [-Trace 0..2] [-Step] [-Off]
シェルの拡張
シングルシェル
ミニシェル
スナップイン
プロバイダ
ファイルシステムと同様にアクセスできる
独自のプロバイダを作成可能
セキュリティ
セキュリティのレベルでモード設定可能
制限つき (オペレーターモード)
対話形式のみ
スクリプトは実行できない
署名
スクリプトは、信頼された発行元による
署名が必要
リモートの署名
“インターネットゾーン” のスクリプトは
信頼された発行元による署名が必要
無制限
すべてのスクリプトを実行可能
リモートのスクリプトについては常に警告
ロードマップ
シナリオ
GUI シェル
現在
将来
MMC とスナップイン
MMC
PowerShell
コマンドシェル
CMD
CMD
SH
CSH
KSH
PowerShell
コマンド
スクリプティング
CMD スクリプト
COM スクリプティング
WSH
CMD スクリプト
PowerShell
WSH
VBScript
Jscript
VBScript
Jscript
Jscript (.NET)
PowerShell
PowerShell と開発者
開発者が用意するもの
管理用オブジェクトに対する .NET のインターフェイス
シンプルなコマンドレット・プロバイダーで、高いユーザビリティを提供
PowerShell により
コマンドレット → コマンドラインツール
プロバイダー → ドライブのように容易にアクセス
PowerShell が提供するもの
対話型シェル
強力な言語サポート
コマンドライン ・ COM ・ .NET スクリプティング
共通のパーサー、引数のバリデータ
ユーティリティー ・ フォーマッター
管理ツールのアーキテクチャ例
PowerShell
Shell
MMC
スナップイン
他の
ホスト
スクリプト & コマンドパーサー
Extended
Type System
コマンドレット
セッション管理
名前空間
プロバイダー
PowerShell エンジン
アプリ
ケーション
Active
Directory
ファイルシステム
レジストリなど
管理機能をコマンドレットとし
て
実装し、コマンドラインと管理コ
ンソールから同等にアクセス
できるようにする
スタイル
GUI
Cmd
VS
例: Exchange Server 2007
まとめ
PowerShell はシステム管理のために必要な
あらゆるデータタイプとデータソースに
共通のアクセス方法を提供するツールです
2006年中にダウンロード提供開始予定
RC2 を提供中:
http://www.microsoft.com/downloads
PowerShell で検索
PowerShell 本体とドキュメントパックがあります
技術情報リソース
ダウンロード: http://www.microsoft.com/download
で PowerShell を検索(PowerShell 本体、ドキュメント)
Script Center: http://www.microsoft.com/technet/scriptcenter
/scripts/msh/default.mspx?mfr=true
ニュースグループ: microsoft.public.windows.server.scripting
Channel 9: http://channel9.msdn.com/tags/PowerShell
Team Blog: http://blogs.msdn.com/PowerShell/default.aspx
Wiki: http://channel9.msdn.com/wiki/default.aspx
/Channel9.WindowsPowerShellQuickStart
© 2006 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.