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

53
1 IT Pro ののののののののののの Windows PowerShell ののののののののののののののののの のののののののの のの のJunichi Anno http://blogs.technet.com/junichia/ Facebook: junichi anno のののののののののののののののの 2012.3.24 の

Upload: junichi-anno

Post on 30-Jun-2015

3.266 views

Category:

Technology


1 download

TRANSCRIPT

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

1

IT Pro のためのスクリプト講座

Windows PowerShell を使おう!

日本マイクロソフト株式会社エバンジェリスト安納 順一 Junichi Annohttp://blogs.technet.com/junichia/Facebook: junichi anno

~ 基礎からサーバー管理の自動化まで

2012.3.24 版

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

2

Agenda

• PowerShell の文化的背景• HOW TO “Windows PowerShell”• PowerShell 3.0 ご紹介

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

3

PowerShell の文化的背景

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

4

Operator

アプリが重過ぎ!常識で考えろ!

Developer

開発者 vs インフラ担当者

新しい機能の開発既存機能との統合や

改善

サービスの展開と継続的で安定したサービスの提供

Development Integration Deployment Delivery

your machine!

your code!

情報が欲しかったら監視方法を詳しく教えろ!

バグがあるから直してくれ!

マシンスペックとか知らねーし

監視もできねーのかよ ww

直してほしかったら詳しい情報をよこせ!

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

5

DevOps(=Development and Operations)開発サイドと運用サイドの協調により、Development ~ Delivery 全体のアジリティを高めるためのプロセス

Developer Operator

DevOps

(参考)・ Velocity 2009 : “10+ Deploys Per Day: Dev and Ops Cooperation at Flickr” by John Allspaw・ DevOps って何? by 宮下 さん http://www.slideshare.net/mizzy/devops-4156440

協調文化を確立し”IT” によりビジネスを進化させる

ビジネスに合わせたアプリケーションの進化

ビジネスに合わせたインフラの進化

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

6

マイクロソフトの DevOps シナリオ

開発担当 運用担当

• Visual Studio 2011• IntelliTrace Agent

• System Center 2012• ConfigMgr 構成パッ

ク• OpsMgr 管理パック• OpsMgr AVICode• Orchestrator(Opalis)• SM インシデント管理• VMM Portal など

• Windows PowerShell• SQL Server bacpac  ・  ・

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

7

DevOps における PowerShell の位置づけ• 目的ベースのコマンドレット( CmdLet )

• アプリケーションに対する処理の正確性• ビジネスにとっての高速性

• 自動化• オペレーション品質• ビジネスに合わせた拡張性

Exchange Server

メールボックス作成

GAL の一覧取得共有ポリシーの変

APINew-Mailbox

目的 コマンドレット

Get-GlobalAddressList

Get-GlobalAddressList

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

8

PowerShell スクリプト

DevOps における PowerShell の位置づけ

サービス開発担当 運用担当サービス専用

コマンドレット開発

作成

処理の自動化製品のメンテナンス

障害の調査

実行

フィードバック

利用

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

9

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

Active Directory

Active DirectoryPowerShell コマンドレット

Active Directory 管理センター

Hyper-V

VMMPowerShell コマンドレット

System Center Virtual Machine Manager

PowerShellコンソール

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

10

Windows Management Framework

PowerShell が Management Hub となる

IT ProIT

DeveloperSolution

Developer

Storage Exchange DevicesDisk YOUR ELEMENTS

Windows PowerShell

CIMOM 、 SMI-S

標準化されたアクセス

標準化されたプロトコル

標準化されたモデル

WS-Man(Web Service for Management) 他のプラットフォーム

Service Provider

開発

NanoWBEM

Pegasus

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

11

代表的なスクリプト言語バッチファイル(拡張子 .bat )

VBScript (拡張子 .vbs )

PowerShell (拡張子 .ps1 )

Jscript (拡張子 .js )

MS-DOS 時代から使われてきたコマンドシェル上のスクリプト。脈々と現代に引き継がれており、利用者が多い。豊富なコマンド群によって支えられており、案外使い出がある。複数のスクリプトを取りまとめる役割としても便利。

Visual Basic のスクリプト版。「 Visual 」とあるが、 Visual ではない。わかりやすい文法と、緩い規則によって根強いファンが多い。亜種として VBA もあるが微妙に文法は異なる。

JavaScript の MS 実装版として、 VBScript とともに登場。 JavaScript を Microsoft の独自仕様によって拡張することで、汎用性を増している。

いわずと知れた高機能スクリプト言語。 .NET Framework が使えると言うメリットから、利用者は爆発的に増殖中。多くの製品が PowerShell 用のコマンドレットを提供しはじめており、 Windows Script Host の存在を脅かしつつある。

Win

do

ws

Scrip

t

今後エンハンスの予定は無い

OS に合わせて継続的なエンハンス

今後エンハンスの予定は無い

(余談) HTML5 によって新 JavaScript エンジンに脚光が!ただし Windows Script とは別物

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

12

Windows

.NET Framework

PowerShell スクリプト

exe

bat VBScript JScript

Script Engine

CLR (共通言語ランタイム)

Class Library

スクリプトの実行環境

PowerShell エンジンCOM

cmd/command

Windows Script HostCscript.exe Wscript.exe

COM

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

13

コマンドシェルの進化と機能の包含

cmd.exe

command.com

高機能

NT

低機能

DOS/Win31 2000

XP/2003Vista/2008

Windows Script Host

PowerShell 上ではbat/vbs/js も実行可能

Win9x/Me

Win7/2008R2

Windows PowerShell

100

200

2300

コマンドレットの数

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

14

VBScript vs PowerShellExchange 2003 (VBScript) Exchange 2007 ( PowerShell )

メールボックス統計

Set listExchange_Mailboxs = GetObject("winmgmts:{impersonationLevel=impersonate}!\\COMPUTERNAME\ROOT\MicrosoftExchangeV2").InstancesOf("Exchange_Mailbox")

For Each objExchange_Mailbox in listExchange_MailboxsWScript.echo "AssocContentCount =” + objExchange_Mailbox.AssocContentCountWScript.echo " DateDiscoveredAbsentInDS =” + objExchange_Mailbox.DateDiscoveredAbsentInDSWScript.echo " DeletedMessageSizeExtended =" + objExchange_Mailbox.DeletedMessageSizeExtendedWScript.echo " LastLoggedOnUserAccount =" + objExchange_Mailbox.LastLoggedOnUserAccountWScript.echo " LastLogoffTime =" + objExchange_Mailbox.LastLogoffTimeWScript.echo " LastLogonTime =" + objExchange_Mailbox.LastLogonTime WScript.echo " LegacyDN =" + objExchange_Mailbox.LegacyDNWScript.echo " MailboxDisplayName =” + objExchange_Mailbox. MailboxDisplayNameWScript.echo " MailboxGUID =" + objExchange_Mailbox.MailboxGUID WScript.echo " ServerName =" + objExchange_Mailbox.ServerName WScript.echo " Size =" + objExchange_Mailbox.SizeWScript.echo " StorageGroupName =" + objExchange_Mailbox.StorageGroupName WScript.echo " StorageLimitInfo =" + objExchange_Mailbox.StorageLimitInfo WScript.echo " StoreName =" + objExchange_Mailbox.StoreName WScript.echo " TotalItems =" + objExchange_Mailbox.TotalItems Next

get-mailboxstatistics –server $servername

データベース管理

Dim StorGroup as New CDOEXM.StorageGroup

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 Exchange,CN=Services, CN=Configuration," + DomainName

StorGroup.MoveLogFiles("C:\newlogPath", 0)

move-storagegrouppath -identity "First Storage Group" –log "C:\newlogPath"

受信者管理

Dim objMailbox As CDOEXM.IMailboxStore

Set objMailbox = GetObject("LDAP://" + DCServer + "CN=FOO,CN=users," + DomainName)

objMailbox.CreateMailbox "LDAP://" + DCServer + "/CN=Private MDB,CN=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

enable-mailbox -identity domain\FOO –database "First Storage Group\Private MDB"

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

15

VBScript PowerShell

42 日以内にパスワードの有効期限が切れるユーザーを検索する

szDomain = "DC=annou,DC=com"intDaysBefore = 30 szDateTime = DateAdd(“d”, 0 - intDaysBefore, Now)lngDateTime = CDateToInt8(szDateTime) Set objConnection = CreateObject(“ADODB.Connection”)objConnection.Open “Provider=ADsDSOObject;”Set objCommand = CreateObject(“ADODB.Command”)objCommand.ActiveConnection = objConnectionobjCommand.Properties(“Page Size”) = 20000objCommand.CommandText = “<LDAP://” & szDomain & “>;” & _ “(&(objectCategory=person)(objectClass=user)” & _ “(pwdLastSet<=” & lngDateTime & “));” & _ “cn,distinguishedName,pwdLastSet;“ & "subtree"Set objRecordSet = objCommand.Execute

Do Until objRecordset.EOF szDN = objRecordset.Fields(“distinguishedName”) szUser = objRecordset.Fields(“cn”) lngpwdLastSet = objRecordset.Fields(“pwdLastSet”) dtpwsLastSet = CInt8ToDate(lngpwdLastSet) WScript.Echo szUser & “,” & dtpwsLastSet objRecordset.MoveNextLoop

objConnection.CloseSet objCommand = Nothing

Function CDateToInt8(szDateTime) dtDateValue = CDate(szDateTime) Set objShell = CreateObject(“Wscript.Shell”) 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 = “HKLM\System\CurrentControlSet\Control\” & _ “TimeZoneInformation\ActiveTimeBias” 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 = lngTZBiasEnd 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 IfEnd Function

Get-ADObject -LDAPFilter:"(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=8388608)(!userAccountControl:1.2.840.113556.1.4.803:=65536)(pwdLastSet>=129729276000000000)(pwdLastSet<=129765564000000000))" -Properties:sAMAccountType,pwdLastSet,givenName,sn,title,userPrincipalName -ResultPageSize:"100" -ResultSetSize:"20201" -SearchBase:"CN=Users,DC=tf,DC=com" -SearchScope:"Subtree" -Server:"TFDC02.tf.com"

1 行

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

16

Windows PowerShell の基礎知識<超参考になるサイト>MVP 牟田口さんhttp://blogs.wankuma.com/mutaguchi/archive/2010/02/13/186034.aspx

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

17

事前準備• コマンドシェルの環境設定

• 簡易編集を有効に• フォントを見やすく• 横幅の設定• バッファの設定

• エクスプローラーの環境設定• 「拡張子を表示しない」を無効に

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

• 必要に応じて自分専用の初期設定ファイルを作成• notepad $profile

cmd.exe と powershell.exe は独立している

必要なモジュールを読み込む .. など

要は自分で作ったスクリプトのこと

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

18

実行ポリシーの設定~ Set-ExecutionPolicy

• “管理者として実行” する必要がある• 実行ポリシー

– Restricted:制限つき ( オペレーターモード ) (規定値)• 対話形式のみ• スクリプトは実行できない

– AllSigned:署名• スクリプトは、信頼された発行元による署名が必要

– RemoteSigned:リモートの署名• “インターネットゾーン” のスクリプトは信頼された発行元による署名が必要

– Unrestricted:無制限• すべてのスクリプトを実行可能• リモートのスクリプトについては常に警告

– Bypass:バイパス• 何もブロックされず警告も表示されない

http://technet.microsoft.com/ja-jp/library/dd347628.aspx

“ ポリシーの設定”は、規定ではコンピューター全体に影響する。適用範囲を制限するには、 Scope も同時に定義する。

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

19

スクリプトの作成環境

バッチファイル

VBScript

PowerShell

エディタ デバッガ

フリー / シェアウェア /商用のエディタ

フリー / シェアウェア /商用のエディタ

メモ帳PowerShell ISE

なし ??

エディタ組み込み

エディタ組み込み

VbsEdit

メモ帳&目視

2.0 からは標準装備

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

20

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

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

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

3. PowerShell コンソールを開いてファイル名を入力

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

PS C:\> .\sample.ps1

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

21

覚えておくと便利な機能

メモ帳 編 指定した行番号に飛ぶ  Ctrl + G ステータスバーを表示すると行と列が参照できる

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

PowerShell コンソール、 ISE 編 タブでコマンドレットやパラメタの続きを補完

 (例) get-mem[Tab]     ↓     Get-Member

※PowerShell 3.0 では Intellisence が実装されている

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

22

“使用法” を理解するために

“ 使用法”を得る方法をおさえておこう

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

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

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

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

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

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

23

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

• Get-Module

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

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

list

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

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

24

操作メソッドメソッド

プロパティプロパティ

オブジェクトPowerShell の戻り値は「オブジェクト」である“オブジェクトとはプロパティとメソッド(操作)の集まり "

サイズ

ブランド

パーツ

ペダルをこぐ

ハンドルを右に切る

ハンドルを左に切る

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

リア ブレーキをかける

もしも”オブジェクト”が自転車だったら ...

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

25

メソッドプロパティ

オブジェクト

DisplayName

Status

DependentServices

Stop()

Start()

Pause()

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

MachineName

PS C:\> Get-Service | Get-Member

Windowsサービス

オブジェクトのメソッドとプロパティ一覧を参照するには

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

26

オブジェクトであるということは ...

PS C:\>$a = “abc”

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

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

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

27

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

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

パイプ

サービス一覧を出力

object

サービス一覧

オブジェ

クト

のまま渡される

object

サービス一覧

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

28

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

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

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

V3 ではこう書ける

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

29

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

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

メソッド

Windows Search サービスのインスタンスを取得

object

Windows Search

インスタンスに対してメソッドを実行

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

30

コマンドからの出力もオブジェクト化される

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

object

ipconfig の

出力結果の 18 行目( 0 から数えて)

IPv4 アドレス . . . . . . . . . . : 192.168.1.100

ipconfig の出力結果から IP アドレスを取りだす

コロンで分割した( 0 から数えて)

2つ目の値 前後の空白をトリミング

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

31

スクリプトを作成するにあたっておさえておきたい基本機能

• コメント• 行継続• 引数を受け取る• 変数を使う• 入出力(コンソール / ファイル)• 繰り返し(ループ)処理• 出力結果のフォーマット変換• 環境変数を取得• 日時取得• 結果を検索• リモーティング

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

32

コメントを付ける

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

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

33

行継続

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

copy-item C:\tmp\*.txt `-destination C:\

こいつ

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

34

引数を受け取る

Write-Output $args[3]

foreach ( $a in $args ) { Write-Output $a }

C:\> .\hogehoge.ps1 My name is “Junichi Anno” .

5つの引数

MynameisJunichi Anno.

Junichi Anno

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

35

名前付き引数

param([string] $UserID = “ID", [string] $Password =“PASS")Write-Output $useridWrite-Output $Password

引数を所定の名前の変数に格納することで、文法チェック等が行いやすくなる

C:\> hogehoge.ps1 -userid anno

annoPASS

出力結果

規定値

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

36

変数

$FirstName = "Junichi"$LastName = "Anno"$FullName = $FirstName + " " + $LastNameWrite-Output $FullName$arrFullName = $FullName.Split(" ")Write-Output $arrFullname[0]

PS C:\> C:\hogehoge.ps1Junichi AnnoJunichi

出力結果

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

37

入出力方法

# 標準出力

Write-Output “Hello”

# 標準入力

$InputData = Read-Host

# ファイルに出力

$Record = “hogehoge”

Out-File -filepath C:\tmp\list.txt -inputobject $Record

# ファイルから入力

$file = Get-Content -Path c:\tmp\list.txt

これを抑えておけば、ひとまずたいていのことはできます

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

38

出力結果のフォーマット変換して表示したい

dir | format-table Name,Lengthdir | format-list Name,Lengthdir | format-wide Name -column 6dir | out-gridview

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

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

以下の出力結果を比較しましょう

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

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

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

41

繰り返し処理

#ForEach-Object Get-ADUser -Filter * | ForEach-Object {$_.name} Get-ADUser -Filter * | ForEach-Object name

#foreach$Users = Get-ADUser -Filter * foreach ($user in $Users) { $user.name }

Active Directory ユーザー一覧から name プロパティをリストする

V3

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

42

環境変数を取得

# 一覧を取得cd env:dir

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

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

43

日時を取得date オブジェクト

DateDayDayOfWeekDayOfYearHourKindMillisecondMinuteMonthSecondTicksTimeOfDayYearDateTime

AddAddDaysAddHoursAddMillisecondsAddMinutesAddMonthsAddSecondsAddTicksAddYearsCompareToEqualsGetDateTimeFormatsGetHashCodeGetTypeGetTypeCode

IsDaylightSavingTimeSubtractToBinaryToFileTimeToFileTimeUtcToLocalTimeToLongDateStringToLongTimeStringToOADateToShortDateStringToShortTimeStringToStringToUniversalTime

プロパティ

メソッド

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

44

リモーティング• 3 種類のリモーティング

• -ComputerName パラメタ• 複数のコンピュータを指定可能

• 対話モード( Enter-PSSession コマンドレット)• SSH のような使い方

• Invoke モード( Invoke-Command コマンドレット)• -ComputerName に対応していないコマンドで使用• 複数のコンピュータに対して一括実行• コマンド単体( -scriptblock )、

PS1 スクリプト( -filepath )の指定が可能

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

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

45

PowerShell セッション( PSSessions )

PS> Enter-PSSession -ComputerName Server1[Server1]: PS > $A = 1[Server1]: PS > $B = 2[Server1]: PS > $C = $A + $BPS>Exit-PSSession

PS> Invoke-Command -ComputerName Server1 -ScriptBlock {$A = 1}

PS> Invoke-Command -ComputerName Server1 -ScriptBlock {$B = 1}

Enter-PSSession を使用

Invoke-Command を使用

PS> Invoke-Command -ComputerName Server1 -ScriptBlock {$C = $A + $B}

1つのセッション

• コマンドの実行空間単位• セッション内ではデータの共有が可能• 通常はテンポラリセッションが作成され、コマンド終了後に削除される

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

46

PSSession の永続化

PS > $S = New-PSSession -ComputerName CL01PS > 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

• セッションの作成 : New-PSSession• セッションの削除 : Remove-PSSession• セッション一覧 : Get-PSSession• セッションへの再接続 : Enter-PSSession

PS > $S = New-PSSession -ComputerName CL01PS > Enter-PSSession $S[CL01] PS > Get-VM | Where-Object name -EQ "TFWIN7-0" PS > Exit-PSSession

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

47

モジュールとコマンドのインポート

PSSession

Windows 7 Windows Server 2008 R2w/ Hyper-V

• リモートコンピューター上のコマンドレットを一時的に取り込むことができる

• “Invoke-Command -Session” を使用する必要が無くなる• コマンドの実行中はセッションを生かしておく必要がある

Hyper-V module• Get-VM• Start-VM• Stop-VM• ・• ・

PS C:\> Get-VM |ft name

Name ---- TFWin7-0 TFWin7-1 FX TFWin8-0 FX TFWin8-1 Win7_template Win8_template

Pow

erS

hell

実行空間

PSSession を通じてモジュールをインポート

PS C:> $s = New-PSSession -ComputerName Server1PS C:> Import-PSSession -Session $s -Module HYPER-V

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

48

Windows Management Framework 3.0

Windows Server “8” に対応した新しい管理フレームワーク

Beta

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

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

49

Windows Management Framework 3.0

• PowerShell 3.0 (コマンドレット数 2300 !)– ワークフロー– セッションへの再接続– PSScheduledJob モジュールによるジョブスケジューリングへの対応– Show-Command による GUI を使用したコマンド入力– パブリックネットワークでの Enable-PSRemoting

( -SkipNetworkProfileCheck オプション)– WEB/Json系コマンドレット– 新しい PowerShell ISE

• Windows PowerShell Web Service• Server Manager CIM プロバイダー• WinRM 、 WMI のアップデート

http://blogs.technet.com/b/junichia/archive/2012/03/21/3487696.aspx

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

50

PSSession の扱いの違い

PowerShell 2.0 の場合

PSSession

セッション情報

PowerShell 3.0 beta の場合

PSSession

セッション情報

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

セッション情報はリモートコンピューターに保存されるため、別のクライアントから再接続できる

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

51

Session への再接続

Name = Session1

New-PSSession -ComputerName ServerA

$A = 1

Disconnect-PSSessions -Name Session1

Connect-PSSession -ComputerName ServerA-Name Session1

Enter-PSSession -Name Session1Connect-PSSession -Name Session1

Enter-PSSession -Name Session1

$A = 1

Server1

Exit-PSSession

セッション作成

PS C:\>$A1

再接続

自宅社内

セッション情報がリモートコンピュータ内に保存されるようになった

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

52

まとめ

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

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

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

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

53