Windows Server 2012 管理のための Windows PowerShell 3.0 新機能解説 Microsoft MVP for PowerShell 牟田口大介 自己紹介 牟田口大介 •ライターやってます • 2008 Windows PowerShell ポケットリファレンス(技術評論社) • 2009 PowerShellによるWindowsサーバ管理術(ソフトバンククリエイ ティブ、共著) • 2010~ PowerShell的システム管理入門(@IT) •Microsoft MVP for PowerShell • July 2004 ~ June 2013 •わんくま同盟 大阪勉強会でスタッフ&スピーカー •http://winscript.jp/ •http://twitter.com/mutaguchi アジェンダ • PowerShellとは • PowerShell 3.0 新機能 • PowerShell 3.0 改善点 • まとめ part.1 POWERSHELL とは 4 PowerShell 登場以前 従来環境の問題点 コマンドプロンプト スクリプト(バッチファイル)の構文が貧弱 コマンドが多すぎて把握しづらい コマンドの使い方もバラバラ WSH (VBScript or JScript) 冗長な記述を強いられるスクリプト インタラクティブシェルの機能がない すべての問題を解決する PowerShell の登場 PowerShell とは • Microsoft が作ったシステム管理用の新しいシェル • Windows Server 2008 R2 / Windows 7 から OS の標準機 能に (PowerShell 2.0) • Windows Server 2012 / Windows 8ではさらに高機能化 (PowerShell 3.0) • 「コマンドレット」を組み合わせて使用 • .NET Framework を用いたオブジェクトベースのシェル • 強力なスクリプト言語 – 開発環境 (PowerShell ISE) が標準搭載 コマンドレットの特長 ~ 統一された小さなコマンド群 • 命名規則が統一されている Get-Process -Name PowerShell 動詞-名詞 -パラメータ名 パラメータ値 • すべてのコマンドの基本的な使い方が同じ • コマンドを探しやすい・他の類似コマンド名が類推できる Process を扱うコマンドレットを探す: Get-Command -Noun Process • 入力の省力化 コマンドレットやパラメータにタブ補完、エイリアス機能 • パイプラインで組み合わせて複雑な処理が可能 パイプラインを渡るデータはテキストではなくオブジェクト part.2 POWERSHELL 3.0 新機能 8 PowerShell 3.0 のインストール • Windows Server 2012 RC / Windows 8 RPの場合、追加 インストール不要(WMF3.0 RC相当) • Windows Server 2008 SP2 / 2008 R2 SP1/ Windows 7 SP1 • .NET4をインストール • Download: WMF 3.0 RC - Microsoft Download Center - Download Details http://www.microsoft.com/en-us/download/details.aspx?id=29939 からWindows Management Framework 3.0 RCをDLしインストール PowerShell 3.0 エンジン • PowerShell 3.0は対応する.NET(CLR)のバージョンが2.0か ら4.0になった • PowerShell 3.0は2.0に対し後方互換性あり • 3.0と2.0のエンジンは共存可能 • サイドバイサイド実行可 • powershell.exe -version 2 • 3.0のセッションから2.0のセッションを実行なども可能 スクリプト高速化 • パーサーの改善 • 初回…式木にコンパイル→インタプリタ実行 • よく使う処理/ループ…バックグラウンドでJITによりコンパイル • DLR化 • PSObjectはPowerShell独自の型拡張システムのラッパーオブジェクトで はなくDLRのdynamic objectそのものになった – 他言語からPSObject をdynamicキーワードで扱える • IronPythonなどと同様の機能を持つが、HostingなどDLRのすべての機能 を満たしているわけではない http://huddledmasses.org/powershell-3-finally-on-the-dlr/ • スクリプトの実行速度6倍に ワークフロー(1) • PS Workflow • 以下の目的に特化した関数の一種 – 長時間を要するタスク – リモート実行 – 並列実行 • Workflowジョブの中断と再開が可能 – 切断したセッションへの再接続も可能(WinRM3.0による堅牢なセッション) • 専用構文workflow • 実行時はWF (Windows Workflow Foundation) のxamlに変換される ワークフロー(2) • Windows Workflow Foundation (WF)と連携 • PSコマンドレットをWFのアクティビティとして利用可 – Microsoft.PowerShell.*.Activities名前空間 • WFのワークフローをPowerShellから実行可 – Import-Module hoge.xaml – WFのデザイナで書いたワークフローをPowerShell スクリプトとして実行 PS Workflow 文法 • functionの代わりにworkflowで定義 • parellelブロック • ブロック内の文を並列して実行 – その中で逐次処理したい部分はsequenceブロックに記述 • foreach -parallelステートメント • 配列要素を並列して処理 • inlinescriptアクティビティ • 通常のPowerShellスクリプトを記述 • 自動的に定義される共通パラメータ • -PSRunningTimeoutSec, -PSSessionOption, -AsJobなど • 通常のスクリプトに比べさまざまな制限あり • breakが使えないとかパラメータ名省略できないとか… 追加コマンドレット • v1: 129→v2: 236→v3: 261 (25個増加) • ジョブ/PSリモーティング/ワークフロー関係 • • • • Suspend-Job Resume-Job Register-JobEvent Connect-PSSession Disconnect-PSSession Receive-PSSession New-PSSessionConfigurationFile Test-PSSessionConfigurationFile Disable-PSRemoting New-PSTransportOption • Web関係 • ConvertFrom-Json ConvertTo-Json • Invoke-RestMethod Invoke-WebRequest • その他 • • • • • Show-Command Save-Help Update-Help Get-ControlPanelItem Show-ControlPanelItem Get-TypeData Remove-TypeData New-WinEvent Rename-Computer Unblock-File Export-CimCommand モジュール(PS3.0付属) • PowerShell 2.0 (25コマンドレット) • • • • PSDiagnostics (10) BitTransfer (8) AppLocker (5) TroubleShootingPack (2) • PowerShell 3.0で追加 (29コマンドレット) • PSScheduledJob (16) • CimCmdlets (12) • PSWorkflow (1) • 計7モジュール、54コマンドレット モジュール(Windows 8付属) Storage (64) Appx (5) BranchCache (31) BitLocker (49) DnsClient (15) DnsNrpt (7) MsDtc (41) NetworkTransition (37) NetLbfo (13) NetSwitchTeam (7) Wdac (12) PrintManagement (18) Dism (1) SmbShare (23) DnsConfig (7) iSCSI (14) DirectAccessClientComponent PS_MMAgent (3) s (11) NetAdapter (64) ScheduledTasks (33) NetworkConnectivityStatus (4) NetTCPIP (34) NetQos (4) SmbWitness (4) PKIClient (17) KdsCmdlets (6) TrustedPlatformModule (9) SecureBoot (8) NetworkSecurity (4) DnsLookup (1) • 計30モジュール、546コマンドレット 新モジュール(Server 2012 付属) 「役割」「機能」にそれぞれ対応するモジュールが存在 ADDeploymentWF (1) BestPractices (4) ClusterAwareUpdating (8) FileServer (41) Hyper-V (148) MicrosoftiSCSITarget (22) netwnv (13) RDManagement (103) ServerManager (2) ServerManagerShell (27) TelemetryManagement (2) UserAccessLogging (14) Whea (2) DnsServer (97) ADDSDeployment (73) UpdateServices (13) ActiveDirectory (134) FailoverClusters (78) WindowsServerBackup (35) WebAdministration (71) GroupPolicy (26) MSMQ (22) ※ここに挙げたのはすべてではない モジュール、コマンドレット数まとめ 環境 PSコア PS付属 Win8 Server2012 合計 Win7/PS2 7 (236) 4 (25) - - 11 (261) Win7/PS3 7 (261) 7 (54) - - 14 (315) Win8/PS3 7 (261) 7 (54) 30 (546) - 44 (861) Server2012/PS3 7 (261) 7 (54) 30 (546) 22+ (2300+) 66+ (2300+) Cmdlet Auto Discovery コマンド入力 ロード済モジュールに 存在? NO YES コマンド実行 (従来はここでエラー終了) モジュールフォルダから コマンドレット探索 コマンドレット 発見? NO エラー終了 YES 該当モジュールロード コマンド実行 exeコマンド→コマンドレット移行例 • ipconfig.exe→ Get-NetIPAddress (NetTCPIPモジュール) • nslookup.exe→ Resolve-DnsName (DNSClientモジュール) • netsh.exeを実行するとサブコマンドによっては「 PowerShellを使ってね」的な表示がされる。 • dcpromo.exeを実行すると「サーバーマネージャでやってね 」的な表示がされる。昇格はActiveDirectoryモジュールを使 ったスクリプトが動作。 Active Directory 管理センター 22 PowerShellベースのサーバーアプリ Script SCVVM PowerShell Console PowerShell ISE IT Pros Remote or Local PowerShell Modules GUI Front-End GUI GUI Front-End Front-Ends Cmdlets PS Providers Cmdlets PS Providers Cmdlets PS Providers Remote or Local Server App Resources Server App Resources Server App Resources Developers Windows Management Framework 3.0における CIM管理 Windows Clients Windows Servers Non-Windows Servers Windows PowerShell WMI Providers MI Providers WMI Cmdlets DCOM CIM Cmdlets CIM-Based Cmdlets WS-Man (WinRM) WMI Engine DCOM WS-Man MI Providers CIMOM NanoWBEM WS-Man WS-Man PowerShell Web Service • Restful インターフェースで PowerShell コマンドレットを 実行 • クライアントは http が使えるものなら何でも可 • OData を扱うさまざまなライブラリが利用可 PowerShell Webアクセス • WebブラウザでPowerShellコンソールにアクセス可能 • PowerShellがない環境でもブラウザがあれば管理できる! • 利用手順 • サーバーマネージャーでIISとWindows PowerShell Web Accessを有効 にする • IISのDefault Web SiteにSSLをバインド • Install-PswaWebApplicationを実行 • Add-PswaAuthorizationRule * * *を実行 • https://サーバー名/pswaにアクセス • 詳しくは C:¥Windows¥Web¥PowerShellWebAccess¥wwwroot¥README.txt PowerShell Webアクセス PowerShell Webアクセス part.3 POWERSHELL 3.0 の改善点 30 PowerShell ISEの強化 • 従来の3ペイン構成から「スクリプト」「コンソール」の2ペ イン構成に • インテリセンス • コマンドレット • パラメータ • 変数のメンバ • 文法エラーに波線 • ブロック折り畳み • アドオン • コードスニペット 文法の改善点 1 • 連想配列→オブジェクト キャスト • 旧)$o=new-object psobject -property @{ Name="mutaguchi"; Age=18} • 新)$o=[pscustomobject]@{Name="mutaguchi";Age=18} • OrderedDictionary • [ordered]@{a=1; b=2} • 変数への属性付与 • [ValidateRange(1,10)][int]$x = 1 • ネイティブコマンドのためのエスケープ記法 --% • cmd --% /c echo $home 文法の改善点 2 • ジェネリックメソッド実行 • $array.Prop が $array | foreach {$_.Prop} と等価に • $using:ラベル • 別セッションにカレントセッションの変数を渡せる • 新演算子 • ビットシフト:-shl -shr • 要素の存在:-in -notin – -containsの右辺左辺が逆になったもの 文法の改善点 3 • foreach($a in $null){"hello"}バグ修正 • .演算子で改行許可 • $a=" a b c d " $a. Trim(). ToUpper(). Split(" ") • 出力リダイレクト先の追加 リダイレクト 意味 リダイレクト 意味 1 パイプライン (標準出力に相当) 2 エラー 3 警告 4 詳細 5 デバッグ * すべて Where-ObjectとForEach-Objectの簡易表記 • Where-Object • 旧)gci | ? {$_.Extension -eq ".txt"} • 新)gci | ? Extension -eq .txt – Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -EQ のようなパラメータセットが全演算子分定義 • ForEach-Object • 旧)gps -name notepad | % {$_.WaitForExit(5000)} • 新)gps -name notepad | % WaitForExit 5000 – ForEach-Object [-MemberName] <string> [-InputObject <psobject>] [-ArgumentList <Object[]>] Get-ChildItemの属性フィルタ • ディレクトリのみ • 旧)gci|?{$_.PSIsContainer} • 新)gci -directory • 読み取り専用のみ • 旧)gci|?{$_.Attributes -band [IO.FileAttributes]::ReadOnly} • 新)gci -readOnly • 複数属性のAND指定 • gci -system -archive • 複数属性のOR指定 • gci -attributes a,h,r • -attributesパラメータでの演算 • gci -attributes h+!r FileSystemプロバイダの改善点 • UNCパスの表示 • 旧)PS Microsoft.PowerShell.Core¥FileSystem::¥¥server¥share> • 新)PS FileSystem::¥¥server¥share> • -LiteralPath,-Credentialパラメータを全コマンドレットに • Get-Contentで文字列を配列化せず読み込む • Get-Content .¥a.txt -raw • NTFS代替データストリームの読み書き • • • • 参照 付加 削除 列挙 Get-Content .¥a.txt -stream ":`$DATA" Set-Content .¥a.txt -stream hoge -value fuga Remove-Item .¥a.txt -stream hoge Get-Item .¥a.txt -stream * レジストリドライブ表示改善 • • PS2.0 SKC VC --- -2 0 1 0 1 0 0 8 3 9 Name ---Shell Extensions Sidebar Telephony ThemeManager Themes PS3.0 Name ---Shell Extensions TaskManager Telephony ThemeManager Property -------{} {} {} {ThemeActive, LoadedBefore...} {ThemeChangesDesktopIcons, ...} Property -------HasFlushedShellExtSqmCache : 1 Preferences : {6, 0, 0, 0...} PrePolicy-DllName ThemeActive LoadedBefore LastUserLangID LastLoadedDPI : : : : : C:¥Windows¥resources¥theme... 1 1 1033 96 既存コマンドレットの改善点 • デフォルトパラメータ • $PSDefaultParameterValues = @{"GetProcess:Name"="powershell"} • Select-Object 改善 • -First指定の場合、残りの項目のprocess{}実行キャンセル • Import-Csv –Encoding パラメータ追加 • Out-GridView –PassThru で選択行を次のパイプに 送れるように • コマンドレットの改善点は他にも多数 タブ補完の改善点 • TabExpansion→TabExpansion2 • System.Management.Automation.CommandCompletion • パラメータセット認識 • 利用できないパラメータ名は候補にならない • cdではディレクトリのみ候補に • ForEach-Objectの$_に対してメンバ名を補完 • コマンドレットのパラメータ値に適した候補を補完 • モジュール・プロセス・ヘルプトピック・イベントログ・ジョブ・サービ ス・文字コードなどの列挙体 etc まとめ • PowerShell 3.0 + Windows 8/Server 2012ではいよいよ すべてのコンソールコマンドがコマンドレットに。 • PowerShellモジュールの上に管理GUIが乗る構造 • 開発サイドと運用サイドの協調 • 堅牢なセッションとワークフローのサポートにより、長時間 のタスクを並列してリモート実行するシナリオの実現。 • Windows Management Framework 3.0 により非 Windows サーバーも含めた何千、何万台のサーバーを統括 して管理対象に。 • 言語としても大幅に機能改善。 Q&A 42 Thank You! ご清聴ありがとうございました!! 43
© Copyright 2024 ExpyDoc