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

Post on 30-Jun-2015

3.265 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

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

Windows PowerShell を使おう!

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

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

2012.3.24 版

2

Agenda

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

3

PowerShell の文化的背景

4

Operator

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

Developer

開発者 vs インフラ担当者

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

改善

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

Development Integration Deployment Delivery

your machine!

your code!

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

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

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

監視もできねーのかよ ww

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

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” によりビジネスを進化させる

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

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

6

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

開発担当 運用担当

• Visual Studio 2011• IntelliTrace Agent

• System Center 2012• ConfigMgr 構成パッ

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

• Windows PowerShell• SQL Server bacpac  ・  ・

7

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

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

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

Exchange Server

メールボックス作成

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

APINew-Mailbox

目的 コマンドレット

Get-GlobalAddressList

Get-GlobalAddressList

8

PowerShell スクリプト

DevOps における PowerShell の位置づけ

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

コマンドレット開発

作成

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

障害の調査

実行

フィードバック

利用

9

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

Active Directory

Active DirectoryPowerShell コマンドレット

Active Directory 管理センター

Hyper-V

VMMPowerShell コマンドレット

System Center Virtual Machine Manager

PowerShellコンソール

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

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 とは別物

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

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

コマンドレットの数

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"

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 行

16

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

17

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

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

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

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

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

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

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

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

18

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

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

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

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

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

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

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

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

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

19

スクリプトの作成環境

バッチファイル

VBScript

PowerShell

エディタ デバッガ

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

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

メモ帳PowerShell ISE

なし ??

エディタ組み込み

エディタ組み込み

VbsEdit

メモ帳&目視

2.0 からは標準装備

20

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

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

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

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

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

PS C:\> .\sample.ps1

21

覚えておくと便利な機能

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

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

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

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

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

22

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

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

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

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

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

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

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

23

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

• Get-Module

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

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

list

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

24

操作メソッドメソッド

プロパティプロパティ

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

サイズ

ブランド

パーツ

ペダルをこぐ

ハンドルを右に切る

ハンドルを左に切る

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

リア ブレーキをかける

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

25

メソッドプロパティ

オブジェクト

DisplayName

Status

DependentServices

Stop()

Start()

Pause()

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

MachineName

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

Windowsサービス

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

26

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

PS C:\>$a = “abc”

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

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

27

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

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

パイプ

サービス一覧を出力

object

サービス一覧

オブジェ

クト

のまま渡される

object

サービス一覧

28

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

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

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

V3 ではこう書ける

29

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

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

メソッド

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

object

Windows Search

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

30

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

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

object

ipconfig の

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

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

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

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

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

31

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

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

32

コメントを付ける

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

33

行継続

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

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

こいつ

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

35

名前付き引数

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

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

C:\> hogehoge.ps1 -userid anno

annoPASS

出力結果

規定値

36

変数

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

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

出力結果

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

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

38

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

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

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

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

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

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

42

環境変数を取得

# 一覧を取得cd env:dir

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

43

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

DateDayDayOfWeekDayOfYearHourKindMillisecondMinuteMonthSecondTicksTimeOfDayYearDateTime

AddAddDaysAddHoursAddMillisecondsAddMinutesAddMonthsAddSecondsAddTicksAddYearsCompareToEqualsGetDateTimeFormatsGetHashCodeGetTypeGetTypeCode

IsDaylightSavingTimeSubtractToBinaryToFileTimeToFileTimeUtcToLocalTimeToLongDateStringToLongTimeStringToOADateToShortDateStringToShortTimeStringToStringToUniversalTime

プロパティ

メソッド

44

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

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

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

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

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

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

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つのセッション

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

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

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

48

Windows Management Framework 3.0

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

Beta

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

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

50

PSSession の扱いの違い

PowerShell 2.0 の場合

PSSession

セッション情報

PowerShell 3.0 beta の場合

PSSession

セッション情報

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

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

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

再接続

自宅社内

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

52

まとめ

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

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

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

53

top related