Owner Windows PowerShell の概要 V1, V2 共通のトピック Windows PowerShell V2 の新機能 Windows Server 2008 R2 に搭載される 新バージョン Windows PowerShell = コマンドラインシェル + スクリプティング言語 + .NET Framework GUI でできることは CUI でも 生産性と管理性の向上 システム情報の収集 システムの監視 システム管理の自動化 新しい対話型シェルとスクリプティング言語 .NET Framework 上で動作 数多くの組み込みコマンドレット .NET を活用した新しいスクリプティング言語 「オブジェクト・パイプライン」 現在使っているツールも利用可能 現在使っている自動化技術 (COM) も利用可能 次世代のシステム管理アーキテクチャの基礎 今後サーバー製品で利用 Windows Server 2008 から標準搭載 気軽に始められる まずは、Get-Help, Get-Command, Get-Member 一貫したコマンドレット体系 標準的な名前付けパターン [動詞]-[名詞] (例: get-help, get-command, get-member) オプション指定 Cmdlet –param v1 –param2 v1,v2 –flag 共通のパラメータ -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, -OutVariable, -Verbose -Whatif (シミュレーション), -Confirm (都度確認) コマンドライン 動詞 名詞 PS> get-service 引数名 引数の値 –name “*net*” コマンド 引数 プロパティの名前 結果 Status -----Stopped Running Name ---NetLogon Netman DisplayName ----------NetLogon Network Connections プロパティの値 コマンドレットのオンラインヘルプを参照 PS C:\> Get-Help Get-Service 名前 Get-Service 概要 Gets the services on a local or remote computer. 構文 Get-Service [[-Name] <string[]>] [-ComputerName <string[]>] [-DependentServices] [-Exclude <string[]>] [-Include <string[]>] [-RequiredServices] [<CommonParameters>] コマンドレットのリストを取得 PS C:\> Get-Command *-Service CommandType ----------Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Name ---Get-Service New-Service Restart-Service Resume-Service Set-Service Start-Service Stop-Service Suspend-Service Definition ---------Get-Service [[-Name] <String... New-Service [-Name] <String>... Restart-Service [-Name] <Str... Resume-Service [-Name] <Stri... Set-Service [-Name] <String>... Start-Service [-Name] <Strin... Stop-Service [-Name] <String... Suspend-Service [-Name] <Str... オブジェクトのメンバー (構成) 一覧 PS C:\> Get-Service | Get-Member TypeName: System.ServiceProcess.ServiceController Name ---Name RequiredServices Disposed Close Continue CreateObjRef Dispose Equals ... MemberType ---------AliasProperty AliasProperty Event Method Method Method Method Method Definition ---------Name = ServiceName RequiredServices = ServicesDependedOn System.EventHandler Disposed(System.... System.Void Close() System.Void Continue() System.Runtime.Remoting.ObjRef Creat... System.Void Dispose() bool Equals(System.Object obj) .NET Framework との強力な連携 CLR 上で動作 戻り値は常に「オブジェクト」 .NET Framework のクラスを呼び出せる 使えば使うほどに効いてくる特長 データへのアクセスを共通化 ドライブに割り当て ドライブレターだけでなく、文字列を使用可 実運用レベルのスクリプティング パラメータの型、名前の指定、初期化 スクリプトへのデジタル署名 サードパーティ、コミュニティによるサポート スクリプトやツールが充実 文字に見えても、実体は「型」を持った「オブジェクト」 整数、浮動小数点 日付、時間 ファイル情報、プロセス情報… 文字ではないので、文字列操作が不要 オブジェクトのプロパティとメソッド パイプにはオブジェクトが流れる パイプ、プロセス、変数が簡単に扱える 例:テキストファイルを読み込んで、変数にセット 変数の内容をファイルに保存 表示カラム (プロパティ) を指定 PS C:\> Get-Service | Format-Table Status, Name, CanStop Status -----Stopped Stopped Stopped Running Running ... Name ---AeLookupSvc ALG AppIDSvc Appinfo AppMgmt CanStop ------False False False True True 指定したプロパティの値で並べ替え PS C:\> Get-Service | Sort-Object Status Status -----Stopped Stopped Stopped Stopped Stopped ... Name ---RSoPProv sacsvr RemoteAccess RpcLocator SCardSvr DisplayName ----------Resultant Set of Policy Provider Special Administration Console Helper Routing and Remote Access Remote Procedure Call (RPC) Locator Smart Card 出力をファイルや別のコマンドレットに送る PS C:\> Get-Service | Out-File –FilePath E:\Services.txt PS C:\> Get-Service | Out-GridView ※ Out-GridView は V2 の新機能 すでに利用しているツールも続けて使いたい PowerShell 内で利用可能 コマンド (com, exe) COM オブジェクト ツールが出力するデータを活用 PowerShell でデータを再利用できるように加工 PowerShell で安全なテキスト解析 PowerShell でラップすることで拡張可能 .NET Framework のクラスを直接呼び出せる プログラミングの経験を活用 まずシェルで対話的に実験 ユーティリティで結果を結合 パイプ、Format-* コマンドレット 動作確認した一連のコマンドレットをスクリプトに Start-Transcript による記録も便利 変数、パラメータなどを導入して汎用化 関数に書き換え 実運用レベルのスクリプトに改良 エラー・ログの処理 コード署名 社内やコミュニティで共有 セキュリティのレベルに応じて、スクリプトの実行ポリシーを設定 Set-ExecutionPolicy, Get-ExecutionPolicy 設定の変更には管理者権限が必要 グループポリシーで設定可能 4段階の実行ポリシー Restricted: 制限つき (オペレーターモード) インストール時の既定 対話形式のみ スクリプトは実行できない AllSigned: 署名 スクリプトは、信頼された発行元による署名が必要 RemoteSigned: リモートの署名 "インターネットゾーン" のスクリプトは信頼された発行元による署名が必要 Unrestricted: 無制限 すべてのスクリプトを実行可能 リモートのスクリプトについては常に警告 WMI: Windows Management Infrastructure Windows の多くのシステム情報にアクセス可能 設定の変更も可能 Get-WmiObject で WMI にアクセス可能 WS-Management (WS-Man) システム管理のための Web Service HTTP, HTTPS 経由でリモートアクセス リモートの WMI にアクセス Windows PowerShell V2 のリモーティングも WS-Man で通信 リモート PowerShel l WMI API ローカル WS-Man WSMan HTTP(s) WMI / プロバイダ 管理ツールが Windows PowerShell ベースに Exchange Server 2007 System Center Operations Manager 2007 Virtual Machine Manager 2007 Data Protection Manager 2007 SQL Server 2008 Windows Server 2008 R2, Windows 7 他続々対応 GUI は内部で PowerShell コマンドレットを呼んでいる → GUI からも CUI からも同じ作業が可能に GUI と CUI の連続性 1度きりの作業、1回目の作業は GUI (ウィザード) 繰り返し作業、自動化は CUI (スクリプト) GUI CU I セットアップ WinForm WinForm ADO.NET 管理インターフェイス PowerShell データプロバイダ PowerShell エンジン Exchange コマンドレット 設定情報へのアクセス MAPI Store レジストリ Active Directory CUI、GUI のいずれからも、同じ作業が可能 Meta base 一度目はウィザードで、以降の繰り返しはスクリプトで。 実行される コマンド PowerShell 1.0 2006年11月公開 XP, Windows Server 2003, Vista: ダウンロード Windows Server 2008: 機能の追加 PowerShell 2.0 Windows 7, Windows Server 2008 R2 標準装備 既定で有効。無効化、削除はできない Server Core では既定で無効 その他の OS 向けに、CTP3 公開 (2008年12月) XP, Windows Server 2003, Vista, Windows Server 2008 リモートマシンの PowerShell にアクセス可能に 1 対 1: 対話利用 ローカルと同様に、リモートマシンでコマンド実行 1 対多 (fan-out): 大規模な自動化 複数のマシンに、同じコマンドを同時に投入 非同期の利用 (結果はばらばらに戻ってくる) 多対 1 (fan-in): コマンドを受け入れるサーバーになる 対話的な利用 ホスティングモデル 関連コマンドレット Invoke-Command New-PSSession Enter-PSSession Import-PSSession PSJOB – Start, Get, Wait, Receive, Stop, Remove ローカル実行 リモート実行 結果はローカルに 結果もリモートに 対話実行 セッションの指定が可能 異なるセッションは異なる環境 ジョブは子ジョブを含むことができる スクリプトの実行環境に制限を付けることにより、 より安全な環境を利用可能 例: PowerShell をアプリケーションから呼び出す場合、 限られた操作のみを許可 実行ポリシーよりも、さらに詳細な制限が設定可能 制限対象 コマンドレットと変数の “visibility” (不可視にできる) 実行可能なスクリプト、アプリケーションの ホワイトリスト モジュールは普通のスクリプトと同様。違いは 拡張子が .psm1 Import-Module で読み込み Export-ModuleMember が利用可能 スクリプトに含めることができるもの 実行文 変数の割り当て 関数 スナップインのロード その他 PowerShell のコード 複数の .psm1 ファイルをモジュールフォルダーに入れて おくことができる。 モジュール内で別のモジュールを読み込むことも可能 PowerShell ベースの GUI を、より簡単に作成可能に スクリプティング環境 (IDE) の提供 PowerShell ISE (Interated Scripting Environment) サーバーの運用管理に本格的に活用 Active Directory グループポリシー Server Manager IIS リモートデスクトップサービス フェールオーバークラスタリング Best Practices その他… Active Directory Get-, New-, Remove-, Set-ADUser Disable-, Enable-, Search-, Unlock-ADAccount Set-ADAccountExpiration, Set-ADAccountPassword Get-, New-, Remove-, Set-ADGroup Add-, Get-, Remove-ADGroupMember グループポリシー Backup-, Get-, New-, Import-, …, Rename-GPO Get-GPOReport Server Manager Get-, Add-, Remove-, WindowsFeature Add-WindowsFeature Remove-WindowsFeature IIS IIS: ドライブ New-, Remove-, Restart-, Start-, Stop-WebAppPool Add-, Backup-, Get-, …, Set-WebConfiguration 31 既定で有効 クライアントの管理、バッチ処理 クライアントから、サーバーをリモート管理 Windows トラブルシューティング プラットフォーム トラブルシュートのための共通基盤 コントロールパネル > アクションセンター > トラブルシューティング 企業内でも、独自のトラブルシューティング ツールを PowerShell で作成可能 c:\windows\diagnostics Windows PowerShell は ついに運用管理のメインストリームへ 開発者、スクリプト開発者にも 応える豊富な機能 Windows Server 2008 R2 の Windows PowerShell をご活用ください! 33 © 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. Windows PowerShell でのスクリプティング http://www.microsoft.com/japan/ technet/scriptcenter/hubs/msh.mspx TechNet バーチャルラボ 「Windows PowerShell 入門」 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 http://social.technet.microsoft.com/Forums/jaJP/powershellja/threads OS Windows Server 2008 標準装備、「機能の追加」から Windows XP SP2 以降 Windows Server 2003 SP1 以降 Windows Vista アーキテクチャ 32 bit 版、64 bit 版 必要なソフトウェア .NET Framework 2.0 Windows Vista, Windows Server 2008 には同梱 入手方法 「 Windows PowerShell でのスクリプティング」から (参考資料参照) OS Windows Server 2008 R2, Windows 7 標準装備 Windows Server 2008 , Windows Server 2003 SP2 Windows Vista SP1, Windows XP SP3 ダウンロードセンターにて CTP3 提供中 サポート OS は CTP3 時点の情報 アーキテクチャ 32 bit 版、64 bit 版 必要なソフトウェア .NET Framework 2.0 .NET Framework 3.5 SP1 (ISE, Out-GridView 利用時) WinRM 2.0 CTP3 (リモーティング利用時) Windows PowerShell CTP3 ダウンロードページにリンクあり 図形をドロップ • • • • 詳細の設定 スクリプト生成 PowerShell が身近なツールに (PowerShell V1 用) ビジュアルにスクリプトを作成 そのまま仕様書に 無償ダウンロード http://www.microsoft.com/japan/windowsserver2008/powershell-tool.mspx 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 ファイルを取り扱う 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 … オブジェクトの活用により、テキスト処理が必要な 場面はかなり減少した .NET String クラス Join, Split, SubString, Trim, Length, … 多くの .NET の型と変換を利用可能 [datetime], [URI], ENUMS, … 豊富な string オペレーター +, *, -f, -replace, -match, -like, -eq, -ne, -gt, -ge, -lt, -le 暗黙、明示的なキャスト、強制 正規表現を使ったマッチング Select-String リスト形式、表形式、ワイド、カスタムビューの フォーマッタが用意されている 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 さまざまなデータストアに、共通のアクセス方法を提供 データストアは「ドライブ」として見える Filesystem, Registry, Alias, Certs, Env, Functions, Variables, … get-childitem HKLM:\SOFTWARE\Microsoft 「ドライブ」はさまざまな情報を含む名前空間 Item, ChildItem, Content, Property, ACL, … 共通のコマンドレットでアクセス可能 また alias が既定で設定されている Get-ChildItem dir ls Get-Cwd Get-Content cd type pwd cat New-item –type directory mkdir mkdir Set-Location cd cd ドライブ名、プロバイダを指定して新しいドライブをマウント 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 すべての .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) 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} Get-WmiObject WMI 名前空間とのインターフェイス Get-WmiObject –list [-Namespace xx] Get-WmiObject –Class win32_bios リモート接続可能 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 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") 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 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 | ConvertToHtml ); sleep 1} イベントログ システムログから最新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 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} ファイルシステム監視 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 $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を参考に実装してみてください } } }
© Copyright 2024 ExpyDoc