PowerShellハンズオン

PowerShellハンズオン
2012/03/24
第27回 .NET 勉強会 / ヒーロー島
牟田口大介
POWERSHELLハンズオ
ンの準備、諸注意
講師自己紹介
牟田口大介
 ライターやってます
◦ 2008 Windows PowerShell ポケットリファレンス(技
術評論社)
◦ 2009 PowerShellによるWindowsサーバ管理術(ソフト
バンククリエイティブ、共著)
◦ 2010~ PowerShell的システム管理入門(@IT)
http://www.atmarkit.co.jp/fwin2k/operation/pshsys01/pshsy
s01_01.html
 Microsoft MVP for PowerShell

◦ 昨年7回目の受賞をさせていただきました
http://winscript.jp/
 http://twitter.com/mutaguchi
 http://www.facebook.com/daisuke.mutaguchi

アジェンダ
PowerShellハンズオンの準備、諸注意
 第一部:コンソールを使ってみよう
 休憩
 第二部:スクリプトを書いてみよう
 第三部:PowerShellリモート体験

◦ ↑時間があれば…

本日のまとめと後処理
本日の目標
PowerShellコンソールの使い方を理解
する
 簡単なPowerShellスクリプトを作成し
て実行する方法を理解する
 PowerShellリモートの概念を理解し、
バックグラウンド処理とリモート処理
の仕方を理解する(時間があれば)

ハンズオンの諸注意
PowerShellはシステム管理シェルで、その名
の通り強力です。よって、オペレーションミ
スでファイルや設定などを壊してしまう可能
性があります。
 PowerShellはUACをオンにした上で昇格せず
に起動してください。(指示があるときを除
く)
 Get-*以外のコマンドレットを実行する際は
以下の共通パラメータを使い確認を

◦ -whatIf (実行した場合何が起こるか表示)
◦ -confirm (実行する前に実行確認表示)

分からないことがあればいつでも聞いてくだ
さい!!
準備

PowerShellのインストールは済んでい
ますか?(XP,Vistaの方!)
◦ 「スタート」-「すべてのプログラム」「アクセサリ」-「Windows PowerShell」
◦ まだの方はインストールをお願いします。
 検索:「 Windows PowerShell 2.0」
◦ PowerShell ISEが起動しない方は休憩後の
スクリプト演習までに.NET Framework 3.5
Service Pack 1 のインストールをお願いし
ます。
 検索:「 .NET Framework 3.5 sp1」
第一部
コンソールを使ってみよう
コンソールを使ってみよう

起動
◦ スタートメニュー
◦ Win7ならタスクバーにピン留め
◦ ファイル名を指定して実行→powershell.exe

まずはコマンドプロンプト感覚でフォル
ダの中身を見てみましょう
◦ cd:カレントディレクトリ移動
◦ dir:カレントディレクトリのファイル一覧表
示
◦ タブ補完でフォルダ名補完
コマンドレットの基本
cd,dirなどはコマンドレットです。
 これらはエイリアス(別名)です。正式
名称は「動詞-名詞」です。

◦ cd : Set-Location
◦ dir : Get-ChildItem

パラメータの指定
◦ cd FolderName
Set-Location -path ".\FolderName"
 パラメータ名、パラメータ値は省略可能なものがあ
る

コマンドレット名、パラメータ名もタブ
補完できます。
コマンドレットを調べる

コマンドレット情報取得
◦ Get-Command
◦ Get-Command -noun Location
◦ Get-Command *wmi* -type cmdlet

ヘルプを引く
◦
◦
◦
◦
◦
◦
Get-Help Set-Location
Set-Location -?
Get-Help Set-Location -detailed
Get-Help -category helpfile
help Set-Location
HTMLヘルプもあります。
ファイルシステムの操作


-whatIf と -confirmパラメータで実行確認を!
フォルダ作成(作業用フォルダ)
◦ New-Item -type Directory PSハンズオン

カレントフォルダをエクスプローラで開く
◦ Invoke-Item .

テキストファイル作成
◦ Set-Content test.txt -Value てすと!

テキストファイルの表示
◦ Get-Content test.txt

ファイルコピー
◦ Copy-Item test.txt test2.txt

ファイルリネーム
◦ Rename-Item test2.txt backup.txt

ファイル削除
◦ Remove-Item *.txt
レジストリドライブ

レジストリドライブを表示する
◦ Get-PSDrive
cd HKCU:
dir
Get-ItemProperty .\Console

ファイルシステム以外のリソースに対
しても共通のコマンドレットが使える
選択と列挙
コマンドレットが返すオブジェクト配列をパ
イプラインを通して後続コマンドレットに。
 プロパティとメソッド列挙:Get-Member

◦ dir|Get-Member

フィルタ:Where-Object
◦ dir|Where {$_.Extension -eq ".txt"}

選択:Select-Object
◦ dir|Select Name, CreationTime,Extension

列挙:ForEach-Object
◦ dir|ForEach {Write-Host $_.FullName}
結果の整形、出力形式、出力先
変更

出力フォーマット変更
◦ 表:Format-Table
◦ リスト:Format-List
◦ 一覧:Format-Wide

出力テキスト形式変更
◦ CSV:ConvertTo-CSV
◦ HTML:ConvertTo-HTML
◦ XML:ConvertTo-XML

出力先変更
◦ ウィンドウ:Out-GridView
◦ ファイル
 プレーンテキスト:Out-File
 CSV:Export-CSV
 XML:Export-CliXml
◦ 文字列化:Out-String
各種システム情報を取得
プロセス取得:Get-Process
 サービス取得:Get-Service
 イベントログ取得:Get-EventLog

◦ イベントログの種類:Get-EventLog -list

Windowsイベントログ:Get-WinEvent

必要な情報をフィルタ、選択したり、
出力形式を変更したりしてみよう!
システム情報取得・設定(WMI)

WMIを利用するコマンドレット
◦
◦
◦
◦
◦
Get-WmiObject -list
Get-WmiObject Win32_OperatingSystem
Invoke-WmiMethod
Get-HotFix
Restart-Computer
第一部のまとめ
コンソールにコマンドレットを入力す
るとシステム情報の取得や設定ができ
る。
 色々なリソースをPSドライブとして扱
え、共通のコマンドレットが使用でき
る。
 コマンドレットが返すオブジェクト配
列はフィルタや列挙ができる。
 コマンドレットの出力先や形式を変更
できる。

第二部
スクリプトを書いてみよう
ISEでスクリプトを書いてみよう
スタートメニューorタスクバーから起
動
 基本はコンソールに入力していたコマ
ンドを改行区切りで記述していくだ
け!
 スクリプトペインにスクリプトを書き、
コマンドペインでそれを呼び出し、結
果ペインに結果が表示される。

スクリプトを実行してみよう

ExecutionPolicy設定
◦ Set-ExecutionPolicy RemoteSigned

実行
◦
◦
◦
◦
◦
ISEで
powershell.exeで
ショートカット作成
タスクスケジューラ
プロファイル
PowerShell構文

変数
◦ $変数名

文字列
◦ "文字列"か'文字列'

コメント
◦ #コメント行

演算子
◦ 算術:+ -

比較: -eq -lt -le -gt -ge 論理:-or -and
配列
◦ $a=@(1,2,3 )
◦ $a[0]



if(条件){}
foreach($item in $items){}
関数
◦ function Get-Text{param($text)Write-Host $text}
.NETの呼び出し

インスタンス作成
◦ $client=New-Object System.Net.WebClient

スタティックメンバ呼び出し
◦ スタティックメンバの調査
 [System.Environment]|Get-Member -static
◦ [System.Environment]::OSVersion
◦ [Math]::Sqrt(4)
第三部
POWERSHELLリモート
体験
リモート準備

PSリモートを有効に(要管理者権限)
◦ Enable-PSRemoting

PSリモート接続先を指定(要管理者権
限)
◦ Set-Item
WSMan:\localhost\Client\TrustedHosts -value
*
バックグラウンドジョブ実行

ジョブの開始
◦ Start-Job {スクリプト}

ジョブの結果を受け取る
◦ Get-Job|Wait-Job|Receive-Job
リモートコンピュータでコマン
ド実行

リモート実行(ここではローカルPC
に対してテスト。要管理者権限)
◦ Invoke-Command {スクリプト} ComputerName コンピュータ名
 ローカルPCならコンピュータ名は「.」
リモートセッション

固定接続セッションをリモートコン
ピュータに対して作成(ここではロー
カルに対して。要管理者権限)
◦ $session=New-PSSession .
Invoke-Command {スクリプト} -Session
$session

対話型セッションの開始
◦ Enter-PSSession $session
本日のまとめと後処理
設定を元に戻す

ExecutionPolicy
◦ Set-ExecutionPolicy restricted

PSリモート
◦ Disable-PSRemoting

PSリモートの接続先
◦ Set-Item
WSMan:\localhost\Client\TrustedHosts -value
""
本日のまとめ
PowerShellを用いるとWindowsシステ
ム管理が行えます。
 コンソールで対話的に実行することも、
スクリプト化して繰り返し処理、自動
処理、定期実行処理なども可能です。
 リモート機能を使うとサーバーやPC
の管理を遠隔で行えます。複数コン
ピュータで同じ処理を同時に行うこと
も。

Have a happy PowerShell Life!
お疲れ様でした!