PowerShell の基本操作とリモーティング&v3のご紹介 junichia

3,916 views
3,823 views

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,916
On SlideShare
0
From Embeds
0
Number of Embeds
75
Actions
Shares
0
Downloads
106
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

PowerShell の基本操作とリモーティング&v3のご紹介 junichia

  1. 1. IT Pro のためのスクリプト講座Windows PowerShell を使おう! ~ 基礎からサーバー管理の自動化まで 2012.3.24 版日本マイクロソフト株式会社エバンジェリスト安納 順一 Junichi Annohttp://blogs.technet.com/junichia/Facebook: junichi anno 1
  2. 2. Agenda • PowerShell の文化的背景 • HOW TO “Windows PowerShell” • PowerShell 3.0 ご紹介 2
  3. 3. PowerShell の文化的背景 3
  4. 4. 開発者 vs インフラ担当者 Development Integration Deployment Delivery Developer your machine! your code! Operator 新しい機能の開発 サービスの展開と 既存機能との統合や 継続的で安定した 改善 サービスの提供 直してほしかったら バグがあるから直してくれ! 詳しい情報をよこせ! 情報が欲しかったら 監視もできねーのかよww 監視方法を詳しく教えろ! マシンスペックとか知らねーし アプリが重過ぎ!常識で考えろ! 4
  5. 5. DevOps(=Development and Operations) 開発サイドと運用サイドの協調により、 Development ~ Delivery 全体のアジリティを高めるためのプロセス Developer Operator ビジネスに合わせた ビジネスに合わせた アプリケーションの DevOps インフラの進化 進化 協調文化を確立し ”IT”によりビジネスを進化させ(参考) る・Velocity 2009 : “10+ Deploys Per Day: Dev and Ops Cooperation at Flickr” by John Allspaw・DevOps って何? by 宮下 さん http://www.slideshare.net/mizzy/devops-4156440 5
  6. 6. マイクロソフトの DevOps シナリオ • Visual Studio 2011 • IntelliTrace Agent • System Center 2012 • ConfigMgr 構成パック • OpsMgr 管理パック • OpsMgr AVICode 開発担当 • Orchestrator(Opalis) 運用担当 • SM インシデント管理 • VMM Portal など • Windows PowerShell • SQL Server bacpac ・ ・ 6
  7. 7. DevOps における PowerShell の位置づけ • 目的ベースのコマンドレット(CmdLet) • アプリケーションに対する処理の正確性 • ビジネスにとっての高速性 • 自動化 • オペレーション品質 • ビジネスに合わせた拡張性 API 目的 コマンドレット メールボックス作成 New-Mailbox GALの一覧取得 Get-GlobalAddressList Exchange Server 共有ポリシーの変更 Get-GlobalAddressList 7
  8. 8. DevOps における PowerShell の位置づけ PowerShell スクリプト 作成 サービス サービス専用 開発 利用 運用担当 開発担当 コマンドレット 実 行 処理の自動化 フィード 製品のメンテナンス バック 障害の調査 8
  9. 9. マイクロソフト製品と PowerShell の関係 • 製品ごとに専用の”コマンドレット”が用意されている • 多くの管理 GUI は裏でコマンドレットを呼んでいる • インフラ担当者に、各製品への”標準化されたアクセス方法”を提供す る Active Directory PowerShell System Center 管理センター コンソール Virtual Machine Manager Active Directory VMM PowerShell コマンドレット PowerShell コマンドレット Active Directory Hyper-V 9
  10. 10. PowerShell が Management Hub となる IT Solution Service IT Pro Developer Developer Provider 開 発 Windows Management Framework 標準化されたアクセス Windows PowerShell 他のプラッ 標準化されたプロトコル WS-Man(Web Service for Management) トフォーム 標準化されたモデル CIMOM、SMI-S NanoWBEM Pegasus Disk Storage Exchange Devices YOUR ELEMENTS 10
  11. 11. 代表的なスクリプト言語バッチファイル(拡張子 .bat) OSに合わせて継続的なエンハンス MS-DOS時代から使われてきたコマンドシェル上のスクリプト。脈々と現代に引き継がれてお り、利用者が多い。豊富なコマンド群によって支えられており、案外使い出がある。複数の スクリプトを取りまとめる役割としても便利。VBScript(拡張子 .vbs) 今後エンハンスの予定は無い Visual Basic のスクリプト版。「Visual」とあるが、Visual ではない。わかりやすい文法 Windows Script と、緩い規則によって根強いファンが多い。亜種として VBA もあるが微妙に文法は異なる。Jscript(拡張子 .js) 今後エンハンスの予定は無い JavaScript のMS 実装版として、VBScript とともに登場。JavaScript を Microsoft の独自 仕様によって拡張することで、汎用性を増している。 (余談)HTML5 によって新 JavaScript エンジンに 脚光が!ただしWindows Scriptとは別物PowerShell(拡張子 .ps1) いわずと知れた高機能スクリプト言語。.NET Framework が使えると言うメリッ トから、利用者は爆発的に増殖中。多くの製品がPowerShell用のコマンドレット を提供しはじめており、Windows Script Host の存在を脅かしつつある。 11
  12. 12. スクリプトの実行環境 bat VBScript JScript PowerShell スクリプト PowerShell エンジン COM exe Script Engine C .NET Framework Windows Script Host O Class Librarycmd/ Cscript.exe Wscript.exe M CLR(共通言語ランタイム)command Windows 12
  13. 13. コマンドシェルの進化と機能の包含 DOS/ Win9x/ XP/2003 Win7/ 8 Win31 Me NT 2000 Vista/2008 2008R2 低機能 command.com cmd.exe Windows Script Host Windows PowerShell 100 PowerShell 上では 高機能 bat/vbs/js も実行可能 コマンドレットの数 200 2300 13
  14. 14. VBScript vs PowerShell Exchange 2003 (VBScript) Exchange 2007(PowerShell)メール Set listExchange_Mailboxs = GetObject("winmgmts:{impersonationLevel=impersonate}!COMPUTERNAMEROOTMicrosoftExchangeV2").InstancesOf("Exchange_Mailbox") get-mailboxstatisticsボックス統計 For Each objExchange_Mailbox in listExchange_Mailboxs –server $servername WScript.echo "AssocContentCount =” + objExchange_Mailbox.AssocContentCount WScript.echo " DateDiscoveredAbsentInDS =” + objExchange_Mailbox.DateDiscoveredAbsentInDS WScript.echo " DeletedMessageSizeExtended =" + objExchange_Mailbox.DeletedMessageSizeExtended WScript.echo " LastLoggedOnUserAccount =" + objExchange_Mailbox.LastLoggedOnUserAccount WScript.echo " LastLogoffTime =" + objExchange_Mailbox.LastLogoffTime WScript.echo " LastLogonTime =" + objExchange_Mailbox.LastLogonTime WScript.echo " LegacyDN =" + objExchange_Mailbox.LegacyDN WScript.echo " MailboxDisplayName =” + objExchange_Mailbox. MailboxDisplayName WScript.echo " MailboxGUID =" + objExchange_Mailbox.MailboxGUID WScript.echo " ServerName =" + objExchange_Mailbox.ServerName WScript.echo " Size =" + objExchange_Mailbox.Size WScript.echo " StorageGroupName =" + objExchange_Mailbox.StorageGroupName WScript.echo " StorageLimitInfo =" + objExchange_Mailbox.StorageLimitInfo WScript.echo " StoreName =" + objExchange_Mailbox.StoreName WScript.echo " TotalItems =" + objExchange_Mailbox.TotalItems Nextデータ Dim StorGroup as New CDOEXM.StorageGroup move-storagegrouppathベース管理 StorGroup.DataSource.Open "LDAP://" + DCServer + "/ CN=First Storage Group,CN=InformationStore,CN=" + Server + ",CN=Servers,CN=First Administrative Group, CN=Administrative Groups,CN=First Organization, CN=Microsoft -identity "First Storage Exchange,CN=Services, CN=Configuration," + DomainName Group" StorGroup.MoveLogFiles("C:newlogPath", 0) –log "C:newlogPath"受信者 Dim objMailbox As CDOEXM.IMailboxStore enable-mailbox管理 Set objMailbox = GetObject("LDAP://" + DCServer + "CN=FOO,CN=users," + DomainName) -identity domainFOO objMailbox.CreateMailbox "LDAP://" + DCServer + "/CN=Private MDB,CN=First Storage –database "First Storage Group,CN=InformationStore,CN=" + Server + ",CN=Servers,CN=First Administrative Group, CN=Administrative Groups,CN=First Organization, CN=Microsoft Exchange,CN=Services, CN=Configuration," + DomainName GroupPrivate MDB" 14
  15. 15. VBScript PowerShell szDomain = "DC=annou,DC=com"42日以内にパス intDaysBefore = 30 szDateTime = DateAdd(“d”, 0 - intDaysBefore, Now) Get-ADObject -LDAPFilter:ワードの有効期限 lngDateTime = CDateToInt8(szDateTime) Set objConnection = CreateObject(“ADODB.Connection”) "(&(objectCategory=person)(objectClass=user)(!userAccountCoが切れるユーザー objConnection.Open “Provider=ADsDSOObject;” Set objCommand = CreateObject(“ADODB.Command”) objCommand.ActiveConnection = objConnection ntrol:1.2.840.113556.1.4.803:=8388608)(!userAccountControl:を検索する objCommand.Properties(“Page Size”) = 20000 objCommand.CommandText = “<LDAP://” & szDomain & “>;” & _ 1.2.840.113556.1.4.803:=65536)(pwdLastSet>=1297292760000 “(&(objectCategory=person)(objectClass=user)” & _ “(pwdLastSet<=” & lngDateTime & “));” & _ “cn,distinguishedName,pwdLastSet;“ & "subtree" 00000)(pwdLastSet<=129765564000000000))" Set objRecordSet = objCommand.Execute Do Until objRecordset.EOF -Properties:sAMAccountType,pwdLastSet,givenName,sn,title, szDN = objRecordset.Fields(“distinguishedName”) szUser = objRecordset.Fields(“cn”) lngpwdLastSet = objRecordset.Fields(“pwdLastSet”) userPrincipalName dtpwsLastSet = CInt8ToDate(lngpwdLastSet) WScript.Echo szUser & “,” & dtpwsLastSet -ResultPageSize:"100" objRecordset.MoveNext Loop -ResultSetSize:"20201" objConnection.Close Set objCommand = Nothing -SearchBase:"CN=Users,DC=tf,DC=com" Function CDateToInt8(szDateTime) dtDateValue = CDate(szDateTime) Set objShell = CreateObject(“Wscript.Shell”) -SearchScope:"Subtree" -Server:"TFDC02.tf.com" lngBias = TimeZoneBIOS() dtAdjusted = DateAdd(“n”, lngBias, dtDateValue) lngSeconds = DateDiff(“s”, #1/1/1601#, dtAdjusted) CDateToInt8 = CStr(lngSeconds) & "0000000" End Function Function TimeZoneBIOS Set objShell = CreateObject(“Wscript.Shell”) szKey = “HKLMSystemCurrentControlSetControl” & _ 1行 “TimeZoneInformationActiveTimeBias” lngBiasKey = objShell.RegRead(szKey) If UCase(TypeName(lngBiasKey)) = “LONG” Then lngTZBias = lngBiasKey ElseIf UCase(TypeName(lngBiasKey)) = “VARIANT()” Then lngTZBias = 0 For k = 0 To UBound(lngBiasKey) lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k) Next End If TimeZoneBIOS = lngTZBias End Function Function CInt8ToDate(lngDateTime) On Error Resume Next lngAdjust = TimeZoneBIOS lngHigh = lngDateTime.HighPart lngLow = lngDateTime.LowPart If lngLow < 0 Then lngHigh = lngHigh + 1 If (lngHigh = 0) And (lngLow = 0) Then lngAdjust = 0 lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) + lngLow) / 600000000 - lngAdjust) / 1440 CInt8ToDate = CDate(lngDate) If Err.Number <> 0 Then On Error GoTo 0 CInt8ToDate = #1/1/1601# End If End Function 15
  16. 16. Windows PowerShell の基礎知識<超参考になるサイト>MVP 牟田口さんhttp://blogs.wankuma.com/mutaguchi/archive/2010/02/13/186034.aspx 16
  17. 17. 事前準備 • コマンドシェルの環境設定 • 簡易編集を有効に • フォントを見やすく cmd.exe と powershell.exeは独立している • 横幅の設定 • バッファの設定 • エクスプローラーの環境設定 • 「拡張子を表示しない」を無効に 要は自分で作ったスクリプトのこと • オンプレミスの”署名無しスクリプト”を実行できるようにする • Set-ExecutionPolicy RemoteSigned • 必要に応じて自分専用の初期設定ファイルを作成 • notepad $profile 必要なモジュールを読み込む..など 17
  18. 18. 実行ポリシーの設定~ Set-ExecutionPolicyhttp://technet.microsoft.com/ja-jp/library/dd347628.aspx • “管理者として実行” する必要がある • 実行ポリシー – Restricted:制限つき (オペレーターモード)(規定値) “ポリシーの設定”は、規定 • 対話形式のみ ではコンピューター全体に影 • スクリプトは実行できない 響する。適用範囲を制限する – AllSigned:署名 には、Scope も同時に定義す る。 • スクリプトは、信頼された発行元による署名が必要 – RemoteSigned:リモートの署名 • “インターネットゾーン” のスクリプトは信頼された発行元による署名が必要 – Unrestricted:無制限 • すべてのスクリプトを実行可能 • リモートのスクリプトについては常に警告 – Bypass:バイパス • 何もブロックされず警告も表示されない 18
  19. 19. スクリプトの作成環境 エディタ デバッガ フリー/シェアウェア/ なし?? バッチファイル 商用のエディタ メモ帳&目視 フリー/シェアウェア/ エディタ組み込み VBScript 商用のエディタ VbsEdit メモ帳 エディタ組み込み PowerShell PowerShell ISE 2.0からは標準装備 19
  20. 20. スクリプトの作り方と実行方法1. エディタを開く ※スクリプトはテキストファイル2. スクリプトを書いて「名前をつけて保存」 拡張子は .ps13. PowerShell コンソールを開いてファイル名を入力 PS C:> .sample.ps1 または PowerShell ISE で開いて“実行” または エクスプローラからダブルクリック 20
  21. 21. 覚えておくと便利な機能 メモ帳 編 指定した行番号に飛ぶ Ctrl + G ステータスバーを表示すると行と列が参照できる ※いずれも「右端で折り返し」を無効にしておくこと PowerShell コンソール、ISE 編 タブでコマンドレットやパラメタの続きを補完 (例)get-mem[Tab] ↓ Get-Member ※PowerShell 3.0 では Intellisence が実装されている 21
  22. 22. “使用法” を理解するために“使用法”を得る方法をおさえておこう• 呼び出し可能なコマンドレット一覧取得 • Get-Command ※インストールされているモジュールによってコマンドレットは増減する• コマンドレットの詳細な書式と利用例を表示 • Get-Help <コマンドレット> -detailed• 使用可能なオブジェクトストア(ドライブ)の取得 • Get-PSDrive ※インストールされているモジュールによってドライブは増減する 22
  23. 23. (つづき)• インストールされているモジュールを表示する • Get-Module ※”ActiveDirectory” や “GroupPolicy”、”Hyper-V” など、必要なモジュールが 読み込まれていないとコマンドレットを使用することはできない• コマンドレットのメソッドとプロパティ等を表示 • <コマンドレット> | get-member • <コマンドレット> | get-member | sort-object Name | format-list ※ COMのメンバーも取得できる New-Object -com scripting.filesystemobject | Get-Member 23
  24. 24. オブジェクト PowerShell の戻り値は「オブジェクト」である “オブジェクトとはプロパティとメソッド(操作)の集まり" もしも”オブジェクト”が自転車だったら... プロパティ メソッド 操作 プロパティ メソッド 色 ペダルをこぐ サイズ ハンドルを右に切る 型 ハンドルを左に切る ブランド フロント ブレーキをかける パーツ リア ブレーキをかける 24
  25. 25. オブジェクト もしも”オブジェクト”が「Windows のサービス」だったら。。。 オブジェクトのメソッドとプロパティ一覧を参照するには PS C:> Get-Service | Get-Member プロパティ メソッド DisplayName Stop() MachineName Start() Status Windows Pause() DependentServices サービス 25
  26. 26. オブジェクトであるということは... PS C:>$a = “abc” #普通ならば $a は”文字列” になるけれど... #オブジェクトだからメソッドとプロパティが用意されている PS C:>$a.ToUpper() PS C:>ABC PS C:>$a.ToUpper().Split("B")[0] PS C:>A 26
  27. 27. PowerShell の典型的な使い方①(例)起動中のサービス一覧 object サービス一覧 パイプ PS C:>get-service | where-object {$_.Status -eq "Running"} まオ まブ サービス一覧 渡ジ を出力 さェ れク るト の object サービス一覧 27
  28. 28. (参考)3.0 では書式を簡略化できます PS C:>get-service | where-object {$_.Status -eq "Running"} V3 ではこう書ける PS C:>get-service | where-object Status -eq "Running" 28
  29. 29. PowerShell の典型的な使い方②(例)サービスを停止する メソッド PS C:>(Get-Service -Name WSearch).Stop() Windows Search サービスのイ インスタンスに対して ンスタンスを取得 メソッドを実行 object Windows Search 29
  30. 30. コマンドからの出力もオブジェクト化されるipconfig の出力結果からIPアドレスを取りだすPS C:> (ipconfig)[18].Split(":")[1].Trim() object ipconfig の の18行目 出力結果 (0から数えて) コロンで分割した (0から数えて)2 つ目の値 前後の空白を トリミング IPv4 アドレス . . . . . . . . . . : 192.168.1.100 30
  31. 31. スクリプトを作成するにあたっておさえておきたい基本機能 • コメント • 行継続 • 引数を受け取る • 変数を使う • 入出力(コンソール/ファイル) • 繰り返し(ループ)処理 • 出力結果のフォーマット変換 • 環境変数を取得 • 日時取得 • 結果を検索 • リモーティング 31
  32. 32. コメントを付ける# 処理開始copy-item C:tmp*.txt -destination C:tmp2# 処理終了 32
  33. 33. 行継続 アクサン グラーブ記号 (`) を使用する こ copy-item C:tmp*.txt ` い -destination C: つ 33
  34. 34. 引数を受け取る 5つの引数 C:> .hogehoge.ps1 My name is “Junichi Anno” . Write-Output $args[3] Junichi Anno foreach ( $a in $args ) My { name Write-Output $a is Junichi Anno } . 34
  35. 35. 名前付き引数引数を所定の名前の変数に格納することで、文法チェック等が行いやすくなる C:> hogehoge.ps1 -userid anno param([string] $UserID = “ID", [string] $Password =“PASS") Write-Output $userid Write-Output $Password 規定値 anno 出力結果 PASS 35
  36. 36. 変数 $FirstName = "Junichi" $LastName = "Anno" $FullName = $FirstName + " " + $LastName Write-Output $FullName $arrFullName = $FullName.Split(" ") Write-Output $arrFullname[0] PS C:> C:hogehoge.ps1 出力結果 Junichi Anno Junichi 36
  37. 37. 入出力方法 これを抑えておけば、ひとまずたいていのことはできます #標準出力 Write-Output “Hello” #標準入力 $InputData = Read-Host #ファイルに出力 $Record = “hogehoge” Out-File -filepath C:tmplist.txt -inputobject $Record #ファイルから入力 $file = Get-Content -Path c:tmplist.txt 37
  38. 38. 出力結果のフォーマット変換して表示したい dir | format-table Name,Length dir | format-list Name,Length dir | format-wide Name -column 6 dir | out-gridview 38
  39. 39. 特定のプロパティだけをオブジェクトとして取得したい dir | Select-Object Name,Length 戻り値の「見た目」は Format-Table と同じだが、オブジェクトタイプが異 なることに注意! 以下の出力結果を比較しましょう PS C:> dir |ft Name,Lenght |Get-Member PS C:> dir |Select-Object Name, Length |Get-Member 39
  40. 40. 条件を指定して検索した結果だけをオブジェクトとして取得したい #サイズが1024バイト以上のファイルを検索する Dir | Where-Object {$_.length -GT 1024} ` |Select-Object Name,length #Active Directory のユーザー名に”a”を含むユーザーを取 得する Get-ADUser -Filter * ` |Where-Object {$_.name -Like "*a*"} ` | ForEach-Object name 40
  41. 41. 繰り返し処理 Active Directory ユーザー一覧から name プロパティをリストする #ForEach-Object Get-ADUser -Filter * | ForEach-Object {$_.name} Get-ADUser -Filter * | ForEach-Object name V3 #foreach $Users = Get-ADUser -Filter * foreach ($user in $Users) { $user.name } 41
  42. 42. 環境変数を取得 #一覧を取得 cd env: dir #特定の環境変数を表示する $env:computername $env:username $env :userdomain $env:SessionName 42
  43. 43. 日時を取得 date オブジェクト プロパ メソッ Date ティ Add ド IsDaylightSavingTime Day AddDays Subtract DayOfWeek AddHours ToBinary AddMilliseconds ToFileTime DayOfYear AddMinutes ToFileTimeUtc Hour AddMonths ToLocalTime Kind AddSeconds ToLongDateString Millisecond AddTicks ToLongTimeString Minute AddYears ToOADate Month CompareTo ToShortDateString Second Equals ToShortTimeString GetDateTimeFormats ToString Ticks GetHashCode ToUniversalTime TimeOfDay GetType Year GetTypeCode DateTime 43
  44. 44. リモーティング • 3種類のリモーティング • -ComputerName パラメタ • 複数のコンピュータを指定可能 • 対話モード(Enter-PSSession コマンドレット) • SSH のような使い方 • Invokeモード(Invoke-Command コマンドレット) • -ComputerNameに対応していないコマンドで使用 • 複数のコンピュータに対して一括実行 • コマンド単体(-scriptblock)、 PS1スクリプト(-filepath)の指定が可能 • 送受信双方でリモーティングの準備が必要 44
  45. 45. PowerShell セッション(PSSessions) • コマンドの実行空間単位 • セッション内ではデータの共有が可能 • 通常はテンポラリセッションが作成され、コマンド終了後に削除されるEnter-PSSessionを使用 PS> Enter-PSSession -ComputerName Server1 [Server1]: PS > $A = 1 [Server1]: PS > $B = 2 [Server1]: PS > $C = $A + $B PS>Exit-PSSessionInvoke-Command を使用 PS> Invoke-Command -ComputerName Server1 -ScriptBlock {$A = 1} PS> Invoke-Command -ComputerName Server1 -ScriptBlock {$B = 1} PS> Invoke-Command -ComputerName Server1 -ScriptBlock {$C = $A + $B} 1つのセッション 45
  46. 46. PSSession の永続化 • セッションの作成 :New-PSSession • セッションの削除 :Remove-PSSession • セッション一覧 :Get-PSSession • セッションへの再接続 :Enter-PSSession PS > $S = New-PSSession -ComputerName CL01 PS > Invoke-Command -session $S -ScriptBlock {$A=1} PS > Invoke-Command -session $S -ScriptBlock {$B=2} PS > Invoke-Command -session $S -ScriptBlock {$C=$A+$B} PS > Remove-Session $S PS > $S = New-PSSession -ComputerName CL01 PS > Enter-PSSession $S [CL01] PS > Get-VM | Where-Object name -EQ "TFWIN7-0" PS > Exit-PSSession 46
  47. 47. モジュールとコマンドのインポート • リモートコンピューター上のコマンドレットを一時的に取り込むことができる • “Invoke-Command -Session” を使用する必要が無くなる • コマンドの実行中はセッションを生かしておく必要がある PSSession Windows 7 Windows Server 2008 R2PS C:> Get-VM |ft name PowerShell w/ Hyper-VName---- PSSession を通じてモジュールをインポート Hyper-V moduleTFWin7-0 • Get-VM PS C:> $s = New-PSSession -ComputerName Server1 • Start-VMTFWin7-1 FXTFWin8-0 FX PS C:> Import-PSSession -Session $s -Module HYPER-V • Stop-VM • ・TFWin8-1 実 • ・Win7_templateWin8_template 行 空 間 47
  48. 48. Windows Server “8” に対応した新しい管理フレームワークWindows Management Framework 3.0 Betahttp://www.microsoft.com/download/en/details.aspx?id=28998 48
  49. 49. Windows Management Framework 3.0 http://blogs.technet.com/b/junichia/archive/2012/03/21/3487696.aspx • PowerShell 3.0(コマンドレット数 2300!) – ワークフロー – セッションへの再接続 – PSScheduledJob モジュールによるジョブスケジューリングへの対応 – Show-Command による GUI を使用したコマンド入力 – パブリックネットワークでの Enable-PSRemoting ( -SkipNetworkProfileCheck オプション) – WEB/Json系コマンドレット – 新しい PowerShell ISE • Windows PowerShell Web Service • Server Manager CIM プロバイダー • WinRM、WMI のアップデート 49
  50. 50. PSSession の扱いの違い PowerShell 2.0 の場合 セッション情報はローカルに保 PSSession 存されるため、別のクライアン トから再接続できない セッション情報 PowerShell 3.0 beta の場合 セッション情報はリモートコン ピューターに保存されるため、 PSSession 別のクライアントから再接続で きる セッション情報 50
  51. 51. Session への再接続 セッション情報がリモートコンピュータ内に保存されるようになった Server1 Name = Session1 $A = 1 再接続 セッション 作成 社内 自宅 New-PSSession -ComputerName ServerA Connect-PSSession -ComputerName ServerA -Name Session1 Connect-PSSession -Name Session1 Enter-PSSession -Name Session1 Enter-PSSession -Name Session1 PS C:>$A $A = 1 1 Exit-PSSession Disconnect-PSSessions -Name Session1 51
  52. 52. まとめ Windows PowerShell を始めたら、 PowerShell だけを使い続けましょう! コマンドプロンプトに戻ってはいけません! PowerShell に「一短」はありません! 52
  53. 53. 53

×