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