SlideShare a Scribd company logo
1 of 53
IT Pro のためのスクリプト講座
Windows PowerShell を使おう!
                ~ 基礎からサーバー管理の自動化まで
                                     2012.3.24 版



日本マイクロソフト株式会社
エバンジェリスト
安納 順一        Junichi Anno
http://blogs.technet.com/junichia/
Facebook: junichi anno
                                                   1
Agenda
 • PowerShell の文化的背景
 • HOW TO “Windows PowerShell”
 • PowerShell 3.0 ご紹介




                                 2
PowerShell の文化的背景


                    3
開発者 vs インフラ担当者

  Development     Integration    Deployment        Delivery


      Developer         your
                      machine!
                                 your code!    Operator
   新しい機能の開発                                   サービスの展開と
  既存機能との統合や                                   継続的で安定した
      改善                                      サービスの提供

    直してほしかったら                         バグがあるから直してくれ!
    詳しい情報をよこせ!
                                        情報が欲しかったら
      監視もできねーのかよww                     監視方法を詳しく教えろ!

       マシンスペックとか知らねーし                 アプリが重過ぎ!常識で考えろ!
                                                              4
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
マイクロソフトの DevOps シナリオ

         • Visual Studio 2011
            • IntelliTrace Agent
         • System Center 2012
            • ConfigMgr 構成パック
            • OpsMgr 管理パック
            • OpsMgr AVICode
 開発担当       • Orchestrator(Opalis)   運用担当
            • SM インシデント管理
            • VMM Portal など
         • Windows PowerShell
         • SQL Server bacpac
             ・
             ・
                                            6
DevOps における PowerShell の位置づけ
 • 目的ベースのコマンドレット(CmdLet)
    • アプリケーションに対する処理の正確性
    • ビジネスにとっての高速性
 • 自動化
 • オペレーション品質
 • ビジネスに合わせた拡張性
                    API      目的         コマンドレット
                          メールボックス作成       New-Mailbox
                           GALの一覧取得   Get-GlobalAddressList
  Exchange Server         共有ポリシーの変更   Get-GlobalAddressList




                                                              7
DevOps における PowerShell の位置づけ


                PowerShell スクリプト
                                    作成
 サービス             サービス専用
           開発                      利用    運用担当
 開発担当            コマンドレット

                       実
                       行

                  処理の自動化
       フィード      製品のメンテナンス
       バック         障害の調査


                                                8
マイクロソフト製品と PowerShell の関係
 • 製品ごとに専用の”コマンドレット”が用意されている
 • 多くの管理 GUI は裏でコマンドレットを呼んでいる
 • インフラ担当者に、各製品への”標準化されたアクセス方法”を提供す
   る
  Active Directory         PowerShell              System Center
    管理センター                 コンソール              Virtual Machine Manager



        Active Directory                           VMM
    PowerShell コマンドレット                  PowerShell コマンドレット



        Active Directory                      Hyper-V


                                                                        9
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
代表的なスクリプト言語
バッチファイル(拡張子 .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
スクリプトの実行環境

   bat    VBScript         JScript               PowerShell スクリプト


                                                  PowerShell エンジン
                     COM
   exe
                 Script Engine             C       .NET Framework
            Windows Script Host            O          Class Library
cmd/
          Cscript.exe    Wscript.exe       M      CLR(共通言語ランタイム)
command


                                       Windows




                                                                      12
コマンドシェルの進化と機能の包含
       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
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
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
Windows PowerShell の基礎知識
<超参考になるサイト>
MVP 牟田口さん
http://blogs.wankuma.com/mutaguchi/archive/2010/02/13/186034.aspx


                                                                    16
事前準備
 • コマンドシェルの環境設定
    • 簡易編集を有効に
    • フォントを見やすく
                      cmd.exe と powershell.exeは独立している
    • 横幅の設定
    • バッファの設定

 • エクスプローラーの環境設定
    • 「拡張子を表示しない」を無効に         要は自分で作ったスクリプトのこと

 • オンプレミスの”署名無しスクリプト”を実行できるようにする
    • Set-ExecutionPolicy RemoteSigned

 • 必要に応じて自分専用の初期設定ファイルを作成
    • notepad $profile
                       必要なモジュールを読み込む..など
                                                        17
実行ポリシーの設定~ Set-ExecutionPolicy
http://technet.microsoft.com/ja-jp/library/dd347628.aspx
 •   “管理者として実行” する必要がある
 •   実行ポリシー
      –     Restricted:制限つき (オペレーターモード)(規定値) “ポリシーの設定”は、規定
          •     対話形式のみ                       ではコンピューター全体に影
          •     スクリプトは実行できない                 響する。適用範囲を制限する
      –     AllSigned:署名                     には、Scope も同時に定義す
                                             る。
          •     スクリプトは、信頼された発行元による署名が必要
      –     RemoteSigned:リモートの署名
          •     “インターネットゾーン” のスクリプトは信頼された発行元による署名が必要
      –     Unrestricted:無制限
          •     すべてのスクリプトを実行可能
          •     リモートのスクリプトについては常に警告
     –    Bypass:バイパス
          •     何もブロックされず警告も表示されない


                                                                18
スクリプトの作成環境
                    エディタ             デバッガ
                フリー/シェアウェア/  なし??
  バッチファイル       商用のエディタ
                         メモ帳&目視

                フリー/シェアウェア/    エディタ組み込み
    VBScript    商用のエディタ
                          VbsEdit

                メモ帳                 エディタ組み込み
   PowerShell   PowerShell ISE
                              2.0からは標準装備



                                               19
スクリプトの作り方と実行方法

1. エディタを開く
  ※スクリプトはテキストファイル


2. スクリプトを書いて「名前をつけて保存」
   拡張子は .ps1

3. PowerShell コンソールを開いてファイル名を入力
  PS C:> .sample.ps1

  または PowerShell ISE で開いて“実行”
  または エクスプローラからダブルクリック

                                  20
覚えておくと便利な機能
 メモ帳 編
  指定した行番号に飛ぶ Ctrl + G
  ステータスバーを表示すると行と列が参照できる

  ※いずれも「右端で折り返し」を無効にしておくこと

 PowerShell コンソール、ISE 編
   タブでコマンドレットやパラメタの続きを補完
   (例)get-mem[Tab]
           ↓
         Get-Member
 ※PowerShell 3.0 では Intellisence が実装されている
                                            21
“使用法” を理解するために
“使用法”を得る方法をおさえておこう

•   呼び出し可能なコマンドレット一覧取得
    • Get-Command

    ※インストールされているモジュールによってコマンドレットは増減する

•   コマンドレットの詳細な書式と利用例を表示
    • Get-Help <コマンドレット> -detailed

• 使用可能なオブジェクトストア(ドライブ)の取得
   • Get-PSDrive

    ※インストールされているモジュールによってドライブは増減する

                                        22
(つづき)
• インストールされているモジュールを表示する
   • Get-Module

   ※”ActiveDirectory” や “GroupPolicy”、”Hyper-V” など、必要なモジュールが
   読み込まれていないとコマンドレットを使用することはできない

• コマンドレットのメソッドとプロパティ等を表示
   • <コマンドレット> | get-member
   • <コマンドレット> | get-member | sort-object Name | format-list

   ※ COMのメンバーも取得できる
    New-Object -com scripting.filesystemobject | Get-Member




                                                               23
オブジェクト
 PowerShell の戻り値は「オブジェクト」である
 “オブジェクトとはプロパティとメソッド(操作)の集まり"
 もしも”オブジェクト”が自転車だったら...
   プロパティ                     メソッド
                              操作
    プロパティ
                              メソッド
      色                      ペダルをこぐ

     サイズ                   ハンドルを右に切る

      型                    ハンドルを左に切る

     ブランド                 フロント ブレーキをかける

     パーツ                   リア ブレーキをかける


                                          24
オブジェクト
 もしも”オブジェクト”が「Windows のサービス」だったら。。。

 オブジェクトのメソッドとプロパティ一覧を参照するには
 PS C:> Get-Service | Get-Member

    プロパティ                           メソッド
    DisplayName                     Stop()
    MachineName                     Start()
      Status         Windows        Pause()
 DependentServices   サービス



                                              25
オブジェクトであるということは...
 PS C:>$a = “abc”

 #普通ならば $a は”文字列” になるけれど...
 #オブジェクトだからメソッドとプロパティが用意されている

 PS   C:>$a.ToUpper()
 PS   C:>ABC
 PS   C:>$a.ToUpper().Split("B")[0]
 PS   C:>A



                                       26
PowerShell の典型的な使い方①
(例)起動中のサービス一覧                   object
                                 サービス一覧
                  パイプ

 PS C:>get-service | where-object {$_.Status -eq "Running"}

                      まオ
                      まブ
       サービス一覧         渡ジ
        を出力           さェ
                      れク
                      るト
                       の
      object
       サービス一覧


                                                               27
(参考)3.0 では書式を簡略化できます


 PS C:>get-service | where-object {$_.Status -eq "Running"}

                                   V3 ではこう書ける


 PS C:>get-service | where-object Status -eq "Running"




                                                               28
PowerShell の典型的な使い方②
(例)サービスを停止する
                                      メソッド

 PS C:>(Get-Service -Name WSearch).Stop()


            Windows Search サービスのイ
                                             インスタンスに対して
                 ンスタンスを取得
                                             メソッドを実行


               object
                  Windows Search


                                                          29
コマンドからの出力もオブジェクト化される
ipconfig の出力結果からIPアドレスを取りだす

PS C:> (ipconfig)[18].Split(":")[1].Trim()

     object
     ipconfig の   の18行目
      出力結果        (0から数えて)
                              コロンで分割した
                              (0から数えて)2
                                 つ目の値              前後の空白を
                                                    トリミング



                           IPv4 アドレス . . . . . . . . . . : 192.168.1.100
                                                                     30
スクリプトを作成するにあたって
おさえておきたい基本機能
 •   コメント
 •   行継続
 •   引数を受け取る
 •   変数を使う
 •   入出力(コンソール/ファイル)
 •   繰り返し(ループ)処理
 •   出力結果のフォーマット変換
 •   環境変数を取得
 •   日時取得
 •   結果を検索
 •   リモーティング

                       31
コメントを付ける


# 処理開始
copy-item C:tmp*.txt -destination C:tmp2
# 処理終了




                                              32
行継続
 アクサン グラーブ記号 (`) を使用する

                            こ
 copy-item C:tmp*.txt `   い
 -destination C:           つ




                                33
引数を受け取る                                            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
名前付き引数
引数を所定の名前の変数に格納することで、文法チェック等が行いやすくなる

 C:> hogehoge.ps1 -userid anno

 param([string] $UserID = “ID", [string] $Password =“PASS")
 Write-Output $userid
 Write-Output $Password                  規定値

            anno                               出力結果
            PASS




                                                              35
変数
 $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
入出力方法
 これを抑えておけば、ひとまずたいていのことはできます
 #標準出力
 Write-Output “Hello”

 #標準入力
 $InputData = Read-Host

 #ファイルに出力
 $Record = “hogehoge”
 Out-File -filepath C:tmplist.txt -inputobject $Record

 #ファイルから入力
 $file = Get-Content -Path c:tmplist.txt

                                                           37
出力結果のフォーマット変換して表示したい
 dir   |   format-table Name,Length
 dir   |   format-list Name,Length
 dir   |   format-wide Name -column 6
 dir   |   out-gridview




                                        38
特定のプロパティだけをオブジェクトとして取得したい

 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
条件を指定して検索した結果だけを
オブジェクトとして取得したい
 #サイズが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
繰り返し処理
 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
環境変数を取得
 #一覧を取得
 cd env:
 dir

 #特定の環境変数を表示する
 $env:computername
 $env:username
 $env :userdomain
 $env:SessionName


                     42
日時を取得
 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
リモーティング
 • 3種類のリモーティング
    • -ComputerName パラメタ
       • 複数のコンピュータを指定可能
    • 対話モード(Enter-PSSession コマンドレット)
       • SSH のような使い方
    • Invokeモード(Invoke-Command コマンドレット)
       • -ComputerNameに対応していないコマンドで使用
       • 複数のコンピュータに対して一括実行
       • コマンド単体(-scriptblock)、
          PS1スクリプト(-filepath)の指定が可能

 • 送受信双方でリモーティングの準備が必要

                                          44
PowerShell セッション(PSSessions)
 • コマンドの実行空間単位
 • セッション内ではデータの共有が可能
 • 通常はテンポラリセッションが作成され、コマンド終了後に削除される
Enter-PSSessionを使用
  PS> Enter-PSSession    -ComputerName Server1
  [Server1]: PS > $A =   1
  [Server1]: PS > $B =   2
  [Server1]: PS > $C =   $A + $B
  PS>Exit-PSSession
Invoke-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
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
モジュールとコマンドのインポート
 • リモートコンピューター上のコマンドレットを一時的に取り込むことができる
 • “Invoke-Command -Session” を使用する必要が無くなる
 • コマンドの実行中はセッションを生かしておく必要がある

                                                   PSSession

         Windows 7                                                       Windows Server 2008 R2
PS C:> Get-VM |ft name
                          PowerShell


                                                                         w/ Hyper-V
Name
----                                       PSSession を通じてモジュールをインポート                         Hyper-V module
TFWin7-0                                                                                     • Get-VM
                                       PS C:> $s = New-PSSession -ComputerName Server1       • Start-VM
TFWin7-1 FX
TFWin8-0 FX                            PS C:> Import-PSSession -Session $s -Module HYPER-V   • Stop-VM
                                                                                             • ・
TFWin8-1                  実                                                                  • ・
Win7_template
Win8_template             行
                          空
                          間
                                                                                                              47
Windows Server “8” に対応した新しい管理フレームワーク

Windows Management Framework 3.0
                                                             Beta

http://www.microsoft.com/download/en/details.aspx?id=28998




                                                                    48
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
PSSession の扱いの違い

 PowerShell 2.0 の場合
                            セッション情報はローカルに保
               PSSession
                            存されるため、別のクライアン
                            トから再接続できない
          セッション情報


 PowerShell 3.0 beta の場合
                            セッション情報はリモートコン
                            ピューターに保存されるため、
               PSSession
                            別のクライアントから再接続で
                            きる
                  セッション情報
                                             50
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
まとめ

   Windows PowerShell を始めたら、
  PowerShell だけを使い続けましょう!

 コマンドプロンプトに戻ってはいけません!

  PowerShell に「一短」はありません!

                               52
53

More Related Content

What's hot

PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理Kazuki Takai
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
PowerShell DSC と Linux
PowerShell DSC と LinuxPowerShell DSC と Linux
PowerShell DSC と LinuxKazuki Takai
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発Mitsuru Katoh
 
PowerShell 5.0 で広がる運用管理の世界
PowerShell 5.0 で広がる運用管理の世界PowerShell 5.0 で広がる運用管理の世界
PowerShell 5.0 で広がる運用管理の世界Kazuki Takai
 
仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製するjunichi anno
 
Windows PowerShell 5.0 と Windows Server vNext の管理
Windows PowerShell 5.0 と Windows Server vNext の管理Windows PowerShell 5.0 と Windows Server vNext の管理
Windows PowerShell 5.0 と Windows Server vNext の管理Kazuki Takai
 
それでも僕はユニットテストを書きたい - Pester powered by PowerShell
それでも僕はユニットテストを書きたい - Pester powered by PowerShellそれでも僕はユニットテストを書きたい - Pester powered by PowerShell
それでも僕はユニットテストを書きたい - Pester powered by PowerShellHidari Ikw
 
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法Mitsuru Katoh
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドTetsuji Hayashi
 
Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)Takeshi Yoshida
 
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームするマルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームするSyuichi Murashima
 
Microsoft Team Foundation Service 入門
Microsoft Team Foundation Service 入門Microsoft Team Foundation Service 入門
Microsoft Team Foundation Service 入門You&I
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 

What's hot (16)

PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
PowerShell DSC と Linux
PowerShell DSC と LinuxPowerShell DSC と Linux
PowerShell DSC と Linux
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
PowerShell 5.0 で広がる運用管理の世界
PowerShell 5.0 で広がる運用管理の世界PowerShell 5.0 で広がる運用管理の世界
PowerShell 5.0 で広がる運用管理の世界
 
仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する
 
Windows PowerShell 5.0 と Windows Server vNext の管理
Windows PowerShell 5.0 と Windows Server vNext の管理Windows PowerShell 5.0 と Windows Server vNext の管理
Windows PowerShell 5.0 と Windows Server vNext の管理
 
PowerShell 小技集
PowerShell 小技集PowerShell 小技集
PowerShell 小技集
 
それでも僕はユニットテストを書きたい - Pester powered by PowerShell
それでも僕はユニットテストを書きたい - Pester powered by PowerShellそれでも僕はユニットテストを書きたい - Pester powered by PowerShell
それでも僕はユニットテストを書きたい - Pester powered by PowerShell
 
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
 
Domino & REST
Domino & RESTDomino & REST
Domino & REST
 
Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)
 
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームするマルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
 
Microsoft Team Foundation Service 入門
Microsoft Team Foundation Service 入門Microsoft Team Foundation Service 入門
Microsoft Team Foundation Service 入門
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 

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

INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!
INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!
INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!decode2016
 
[DI01] 窓は開かれた! SQL Server on Linux で拡がる可能性
[DI01] 窓は開かれた! SQL Server on Linux で拡がる可能性[DI01] 窓は開かれた! SQL Server on Linux で拡がる可能性
[DI01] 窓は開かれた! SQL Server on Linux で拡がる可能性de:code 2017
 
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~Akira Inoue
 
本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET
本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET
本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NETAkira Inoue
 
Azure serverless!! azure functionsでサーバーを意識しない開発
Azure serverless!! azure functionsでサーバーを意識しない開発Azure serverless!! azure functionsでサーバーを意識しない開発
Azure serverless!! azure functionsでサーバーを意識しない開発Yuki Hattori
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後Akira Inoue
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 日本マイクロソフト株式会社
 
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像Akira Inoue
 
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
.NET の過去、現在、そして未来 ~ .NET 最新アップデート.NET の過去、現在、そして未来 ~ .NET 最新アップデート
.NET の過去、現在、そして未来 ~ .NET 最新アップデートAkira Inoue
 
Recap: PowerShell Core
Recap: PowerShell CoreRecap: PowerShell Core
Recap: PowerShell CoreKazuki Takai
 
SQL Server コンテナ入門(Docker編)
SQL Server コンテナ入門(Docker編)SQL Server コンテナ入門(Docker編)
SQL Server コンテナ入門(Docker編)Tomoyuki Oota
 
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリTakayoshi Tanaka
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれMasataka MIZUNO
 

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

INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!
INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!
INF-009_PowerShell を 使いこなして、自動化対応 エンジニア になろう!!
 
[DI01] 窓は開かれた! SQL Server on Linux で拡がる可能性
[DI01] 窓は開かれた! SQL Server on Linux で拡がる可能性[DI01] 窓は開かれた! SQL Server on Linux で拡がる可能性
[DI01] 窓は開かれた! SQL Server on Linux で拡がる可能性
 
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
 
20070310
2007031020070310
20070310
 
本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET
本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET
本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET
 
20050903
2005090320050903
20050903
 
Azure serverless!! azure functionsでサーバーを意識しない開発
Azure serverless!! azure functionsでサーバーを意識しない開発Azure serverless!! azure functionsでサーバーを意識しない開発
Azure serverless!! azure functionsでサーバーを意識しない開発
 
[Japan Tech summit 2017] APP 001
[Japan Tech summit 2017] APP 001[Japan Tech summit 2017] APP 001
[Japan Tech summit 2017] APP 001
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
 
Clrh 20121215
Clrh 20121215Clrh 20121215
Clrh 20121215
 
JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows (JAWS Days 2017)
 
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
 
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
.NET の過去、現在、そして未来 ~ .NET 最新アップデート.NET の過去、現在、そして未来 ~ .NET 最新アップデート
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
 
20021007
2002100720021007
20021007
 
Recap: PowerShell Core
Recap: PowerShell CoreRecap: PowerShell Core
Recap: PowerShell Core
 
SQL Server コンテナ入門(Docker編)
SQL Server コンテナ入門(Docker編)SQL Server コンテナ入門(Docker編)
SQL Server コンテナ入門(Docker編)
 
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 
20100218
2010021820100218
20100218
 

More from junichi anno

V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...junichi anno
 
Microsoft Azure のセキュリティ
Microsoft Azure のセキュリティMicrosoft Azure のセキュリティ
Microsoft Azure のセキュリティjunichi anno
 
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADAzure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADjunichi anno
 
Azure AD による Web API の 保護
Azure AD による Web API の 保護 Azure AD による Web API の 保護
Azure AD による Web API の 保護 junichi anno
 
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~junichi anno
 
個人情報を守るための アプリケーション設計(概要)
個人情報を守るためのアプリケーション設計(概要)個人情報を守るためのアプリケーション設計(概要)
個人情報を守るための アプリケーション設計(概要)junichi anno
 
IoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on AzureIoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on Azurejunichi anno
 
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計junichi anno
 
Azureの管理権限について
Azureの管理権限について Azureの管理権限について
Azureの管理権限について junichi anno
 
Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版junichi anno
 
リソーステンプレート入門
リソーステンプレート入門リソーステンプレート入門
リソーステンプレート入門junichi anno
 
File Server on Azure IaaS
File Server on Azure IaaSFile Server on Azure IaaS
File Server on Azure IaaSjunichi anno
 
Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版junichi anno
 
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...junichi anno
 
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版junichi anno
 
Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計junichi anno
 
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現junichi anno
 
SaaS としての IDM の役割
SaaS としての IDM の役割SaaS としての IDM の役割
SaaS としての IDM の役割junichi anno
 
クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割junichi anno
 

More from junichi anno (20)

V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
 
Microsoft Azure のセキュリティ
Microsoft Azure のセキュリティMicrosoft Azure のセキュリティ
Microsoft Azure のセキュリティ
 
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADAzure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
 
Azure AD による Web API の 保護
Azure AD による Web API の 保護 Azure AD による Web API の 保護
Azure AD による Web API の 保護
 
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
 
Azure Key Vault
Azure Key VaultAzure Key Vault
Azure Key Vault
 
個人情報を守るための アプリケーション設計(概要)
個人情報を守るためのアプリケーション設計(概要)個人情報を守るためのアプリケーション設計(概要)
個人情報を守るための アプリケーション設計(概要)
 
IoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on AzureIoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on Azure
 
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
 
Azureの管理権限について
Azureの管理権限について Azureの管理権限について
Azureの管理権限について
 
Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版
 
リソーステンプレート入門
リソーステンプレート入門リソーステンプレート入門
リソーステンプレート入門
 
File Server on Azure IaaS
File Server on Azure IaaSFile Server on Azure IaaS
File Server on Azure IaaS
 
Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版
 
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
 
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
 
Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計
 
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
 
SaaS としての IDM の役割
SaaS としての IDM の役割SaaS としての IDM の役割
SaaS としての IDM の役割
 
クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割
 

Recently uploaded

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Recently uploaded (9)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

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

  • 1. IT Pro のためのスクリプト講座 Windows PowerShell を使おう! ~ 基礎からサーバー管理の自動化まで 2012.3.24 版 日本マイクロソフト株式会社 エバンジェリスト 安納 順一 Junichi Anno http://blogs.technet.com/junichia/ Facebook: junichi anno 1
  • 2. Agenda • PowerShell の文化的背景 • HOW TO “Windows PowerShell” • PowerShell 3.0 ご紹介 2
  • 4. 開発者 vs インフラ担当者 Development Integration Deployment Delivery Developer your machine! your code! Operator 新しい機能の開発 サービスの展開と 既存機能との統合や 継続的で安定した 改善 サービスの提供 直してほしかったら バグがあるから直してくれ! 詳しい情報をよこせ! 情報が欲しかったら 監視もできねーのかよww 監視方法を詳しく教えろ! マシンスペックとか知らねーし アプリが重過ぎ!常識で考えろ! 4
  • 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. マイクロソフトの 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. DevOps における PowerShell の位置づけ • 目的ベースのコマンドレット(CmdLet) • アプリケーションに対する処理の正確性 • ビジネスにとっての高速性 • 自動化 • オペレーション品質 • ビジネスに合わせた拡張性 API 目的 コマンドレット メールボックス作成 New-Mailbox GALの一覧取得 Get-GlobalAddressList Exchange Server 共有ポリシーの変更 Get-GlobalAddressList 7
  • 8. DevOps における PowerShell の位置づけ PowerShell スクリプト 作成 サービス サービス専用 開発 利用 運用担当 開発担当 コマンドレット 実 行 処理の自動化 フィード 製品のメンテナンス バック 障害の調査 8
  • 9. マイクロソフト製品と PowerShell の関係 • 製品ごとに専用の”コマンドレット”が用意されている • 多くの管理 GUI は裏でコマンドレットを呼んでいる • インフラ担当者に、各製品への”標準化されたアクセス方法”を提供す る Active Directory PowerShell System Center 管理センター コンソール Virtual Machine Manager Active Directory VMM PowerShell コマンドレット PowerShell コマンドレット Active Directory Hyper-V 9
  • 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. 代表的なスクリプト言語 バッチファイル(拡張子 .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. スクリプトの実行環境 bat VBScript JScript PowerShell スクリプト PowerShell エンジン COM exe Script Engine C .NET Framework Windows Script Host O Class Library cmd/ Cscript.exe Wscript.exe M CLR(共通言語ランタイム) command Windows 12
  • 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. 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. 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. Windows PowerShell の基礎知識 <超参考になるサイト> MVP 牟田口さん http://blogs.wankuma.com/mutaguchi/archive/2010/02/13/186034.aspx 16
  • 17. 事前準備 • コマンドシェルの環境設定 • 簡易編集を有効に • フォントを見やすく cmd.exe と powershell.exeは独立している • 横幅の設定 • バッファの設定 • エクスプローラーの環境設定 • 「拡張子を表示しない」を無効に 要は自分で作ったスクリプトのこと • オンプレミスの”署名無しスクリプト”を実行できるようにする • Set-ExecutionPolicy RemoteSigned • 必要に応じて自分専用の初期設定ファイルを作成 • notepad $profile 必要なモジュールを読み込む..など 17
  • 18. 実行ポリシーの設定~ Set-ExecutionPolicy http://technet.microsoft.com/ja-jp/library/dd347628.aspx • “管理者として実行” する必要がある • 実行ポリシー – Restricted:制限つき (オペレーターモード)(規定値) “ポリシーの設定”は、規定 • 対話形式のみ ではコンピューター全体に影 • スクリプトは実行できない 響する。適用範囲を制限する – AllSigned:署名 には、Scope も同時に定義す る。 • スクリプトは、信頼された発行元による署名が必要 – RemoteSigned:リモートの署名 • “インターネットゾーン” のスクリプトは信頼された発行元による署名が必要 – Unrestricted:無制限 • すべてのスクリプトを実行可能 • リモートのスクリプトについては常に警告 – Bypass:バイパス • 何もブロックされず警告も表示されない 18
  • 19. スクリプトの作成環境 エディタ デバッガ フリー/シェアウェア/ なし?? バッチファイル 商用のエディタ メモ帳&目視 フリー/シェアウェア/ エディタ組み込み VBScript 商用のエディタ VbsEdit メモ帳 エディタ組み込み PowerShell PowerShell ISE 2.0からは標準装備 19
  • 20. スクリプトの作り方と実行方法 1. エディタを開く ※スクリプトはテキストファイル 2. スクリプトを書いて「名前をつけて保存」 拡張子は .ps1 3. PowerShell コンソールを開いてファイル名を入力 PS C:> .sample.ps1 または PowerShell ISE で開いて“実行” または エクスプローラからダブルクリック 20
  • 21. 覚えておくと便利な機能 メモ帳 編 指定した行番号に飛ぶ Ctrl + G ステータスバーを表示すると行と列が参照できる ※いずれも「右端で折り返し」を無効にしておくこと PowerShell コンソール、ISE 編 タブでコマンドレットやパラメタの続きを補完 (例)get-mem[Tab] ↓ Get-Member ※PowerShell 3.0 では Intellisence が実装されている 21
  • 22. “使用法” を理解するために “使用法”を得る方法をおさえておこう • 呼び出し可能なコマンドレット一覧取得 • Get-Command ※インストールされているモジュールによってコマンドレットは増減する • コマンドレットの詳細な書式と利用例を表示 • Get-Help <コマンドレット> -detailed • 使用可能なオブジェクトストア(ドライブ)の取得 • Get-PSDrive ※インストールされているモジュールによってドライブは増減する 22
  • 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. オブジェクト PowerShell の戻り値は「オブジェクト」である “オブジェクトとはプロパティとメソッド(操作)の集まり" もしも”オブジェクト”が自転車だったら... プロパティ メソッド 操作 プロパティ メソッド 色 ペダルをこぐ サイズ ハンドルを右に切る 型 ハンドルを左に切る ブランド フロント ブレーキをかける パーツ リア ブレーキをかける 24
  • 25. オブジェクト もしも”オブジェクト”が「Windows のサービス」だったら。。。 オブジェクトのメソッドとプロパティ一覧を参照するには PS C:> Get-Service | Get-Member プロパティ メソッド DisplayName Stop() MachineName Start() Status Windows Pause() DependentServices サービス 25
  • 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. PowerShell の典型的な使い方① (例)起動中のサービス一覧 object サービス一覧 パイプ PS C:>get-service | where-object {$_.Status -eq "Running"} まオ まブ サービス一覧 渡ジ を出力 さェ れク るト の object サービス一覧 27
  • 28. (参考)3.0 では書式を簡略化できます PS C:>get-service | where-object {$_.Status -eq "Running"} V3 ではこう書ける PS C:>get-service | where-object Status -eq "Running" 28
  • 29. PowerShell の典型的な使い方② (例)サービスを停止する メソッド PS C:>(Get-Service -Name WSearch).Stop() Windows Search サービスのイ インスタンスに対して ンスタンスを取得 メソッドを実行 object Windows Search 29
  • 30. コマンドからの出力もオブジェクト化される ipconfig の出力結果からIPアドレスを取りだす PS C:> (ipconfig)[18].Split(":")[1].Trim() object ipconfig の の18行目 出力結果 (0から数えて) コロンで分割した (0から数えて)2 つ目の値 前後の空白を トリミング IPv4 アドレス . . . . . . . . . . : 192.168.1.100 30
  • 31. スクリプトを作成するにあたって おさえておきたい基本機能 • コメント • 行継続 • 引数を受け取る • 変数を使う • 入出力(コンソール/ファイル) • 繰り返し(ループ)処理 • 出力結果のフォーマット変換 • 環境変数を取得 • 日時取得 • 結果を検索 • リモーティング 31
  • 32. コメントを付ける # 処理開始 copy-item C:tmp*.txt -destination C:tmp2 # 処理終了 32
  • 33. 行継続 アクサン グラーブ記号 (`) を使用する こ copy-item C:tmp*.txt ` い -destination C: つ 33
  • 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. 名前付き引数 引数を所定の名前の変数に格納することで、文法チェック等が行いやすくなる C:> hogehoge.ps1 -userid anno param([string] $UserID = “ID", [string] $Password =“PASS") Write-Output $userid Write-Output $Password 規定値 anno 出力結果 PASS 35
  • 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. 入出力方法 これを抑えておけば、ひとまずたいていのことはできます #標準出力 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. 出力結果のフォーマット変換して表示したい dir | format-table Name,Length dir | format-list Name,Length dir | format-wide Name -column 6 dir | out-gridview 38
  • 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. 条件を指定して検索した結果だけを オブジェクトとして取得したい #サイズが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. 繰り返し処理 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. 環境変数を取得 #一覧を取得 cd env: dir #特定の環境変数を表示する $env:computername $env:username $env :userdomain $env:SessionName 42
  • 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. リモーティング • 3種類のリモーティング • -ComputerName パラメタ • 複数のコンピュータを指定可能 • 対話モード(Enter-PSSession コマンドレット) • SSH のような使い方 • Invokeモード(Invoke-Command コマンドレット) • -ComputerNameに対応していないコマンドで使用 • 複数のコンピュータに対して一括実行 • コマンド単体(-scriptblock)、 PS1スクリプト(-filepath)の指定が可能 • 送受信双方でリモーティングの準備が必要 44
  • 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-PSSession Invoke-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. 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. モジュールとコマンドのインポート • リモートコンピューター上のコマンドレットを一時的に取り込むことができる • “Invoke-Command -Session” を使用する必要が無くなる • コマンドの実行中はセッションを生かしておく必要がある PSSession Windows 7 Windows Server 2008 R2 PS C:> Get-VM |ft name PowerShell w/ Hyper-V Name ---- PSSession を通じてモジュールをインポート Hyper-V module TFWin7-0 • Get-VM PS C:> $s = New-PSSession -ComputerName Server1 • Start-VM TFWin7-1 FX TFWin8-0 FX PS C:> Import-PSSession -Session $s -Module HYPER-V • Stop-VM • ・ TFWin8-1 実 • ・ Win7_template Win8_template 行 空 間 47
  • 48. Windows Server “8” に対応した新しい管理フレームワーク Windows Management Framework 3.0 Beta http://www.microsoft.com/download/en/details.aspx?id=28998 48
  • 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. PSSession の扱いの違い PowerShell 2.0 の場合 セッション情報はローカルに保 PSSession 存されるため、別のクライアン トから再接続できない セッション情報 PowerShell 3.0 beta の場合 セッション情報はリモートコン ピューターに保存されるため、 PSSession 別のクライアントから再接続で きる セッション情報 50
  • 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. まとめ Windows PowerShell を始めたら、 PowerShell だけを使い続けましょう! コマンドプロンプトに戻ってはいけません! PowerShell に「一短」はありません! 52
  • 53. 53