初めてのPowerShell
トレノケート株式会社
テクニカルトレーニング第1部
横山 哲也
自己紹介
2
 横山 哲也 (トレノケート株式会社)
http://www.trainocate.co.jp/
 1994年~ ITプロ向けWindows関連教育
 2003年~ マイクロソフトMVP
 2017 Cloud and Datacenter Management
 好きなPowerShellコマンドレット
 ForEach-Object
 最近の著書・雑誌記事
 ひと目でわかるAzure
「基本から学ぶサーバー&ネットワーク構築」改訂新版(著)日経BP
 グループポリシー逆引きリファレンス厳選98(監修・共著)日経BP
 ソーシャルメディア
 ブログ: ヨコヤマ企画 http://yp.g20k.jp/
概要
3
1. シェルに求められること
2. PowerShellの特徴
3. コマンドレット操作
4. PowerShell基本文法
5. オブジェクト操作のためのコマンドレット
6. スクリプト実行ポリシー
7. PowerShellモジュール
1. シェルに求められること
4
 GUI vs. CUI
 対話処理 vs. バッチ処理
 従来のシェルとPowerShell
シェルに求められること: GUI vs. CUI
5
 GUI(Graphical User Interface)
 直感的に分かる
 繰り返し処理に向かない
 ミスが多い(手が滑った等)
 CUI(Character User Interface)
 事前学習が必要
 繰り返し処理が容易
 致命的なミスが少ない
(タイプミスはエラー)
シェルに求められること: 対話処理 vs. バッチ処理
6
 対話処理
 その場で操作できる
 どんな操作をしたか記憶にないことがある
 バッチ処理
 まとめて操作できる
 繰り返し処理ができる
 自動実行できる
 ファイルを作成する必要がある(記録に残しやすい)
シェルに求められること: 従来のシェルとPowerShell
7
Windows
Explorer
コマンド
プロンプト
CMD.EXE
Windows Scripting
Host(WSH)
Windows
PowerShell
UI GUI CUI CUI CUI
対話処理 ○ △ × ○
バッチ処理 × ○ ○ ○
制御構造 × △ ○ ○
命令体系 ― 不統一
VBScript
JScript(JavaScript)
統一
オブジェクト × × ○ ○
開発環境 × ×
Visual Studio
Microsoft Office
Visual Studio
ISE(標準)
2. PowerShellの特徴
8
 .NET Frameworkと統合
 .NET Frameworkの全オブジェクトにアクセス可能
 COMオブジェクトへのアクセス可能
 オブジェクト指向
 実行結果はオブジェクトで出力(テキストではない)
 統一したコマンド表現
 コマンドレット
 学習が容易
 スクリプト言語として利用可能
 スクリプト編集ツール
 デバッグ機能
 セキュリティを考慮
3. コマンドレット操作
9
 PowerShellの起動
 コマンドレットの形式
 自動補完
 コメント
 行継続
 変数
 エイリアス(別名)
 困ったときは(ヘルプ)
コマンドレット操作: PowerShellの起動
10
 スタートメニューから
 コマンドラインから
 PowerShell
 PowerShell_ISE
コマンドレット操作: コマンドレットの形式
11
 動詞-名詞 [-パラメータ [値]] [-スイッチパラメータ] …
 スイッチパラメータを省略できる場合も
 動詞は機能、名詞は操作の対象
 大小文字は区別しない
Get-ChildItem -Path c:¥temp -Recurse
子要素の取得 ファイルパス指定 ファイルパス 再帰指定
Get-ChildItem c:¥temp -Recurse
Get-ChildItemは、第1引数に –Path が指定されたと仮定
コマンドレット操作: 自動補完
12
 タブキーで自動補完
 タブ…次の候補
 Shift-タブ…前の候補
 自動補完の対象
 コマンドレット名
 オプションパラメーター
 キーワード
 ファイルとフォルダー
TABGet-Chi TAB
コマンド補完 ファイルパス補完
C:¥Us TAB
オプション補完
-Rec
コマンドレット操作: コメント
13
 #以降の行はコメント扱い
# ファイル保守用コマンド (2017/07/25)
# by YOKOYAMA
Copy-Item C:¥APP¥*.* C:¥BACKUP
コマンドレット操作: 行継続
14
 ` (バッククォート)…行継続記号
 1行が画面に収まりきらない場合
 コードの可読性を向上
Copy-Item C:¥APP¥*.* C:¥BACKUP `
-Recurse `
-Force
コマンドレット操作: 変数
15
 変数は $ からはじめる
 コマンドレットの結果(オブジェクト)を格納
 暗黙の配列指定
 複数の値を代入すると配列になる
$Files = Get-ChildItem
Write-Output $Files[0]
Write-Output $Files[1]
$Files = Get-ChildItem
コマンドレット操作: エイリアス(別名)
16
 フォルダとファイルの一覧表示
 Get-ChildItem –Path c:¥windows
 エイリアスの表示…Get-Alias
 従来のコマンドを使用可能にするため
(ただし文法はPowerShellの規則に従う)
 例: dirはGet-Child-Itemのエイリアス
 ○ dir………………
 × dir /s……………
 ○ dir –Recurse…
Get-ChildItem
Get-ChildItem /s
Get-ChildItem -Recuse
コマンドレット操作: 困ったときは
17
 コマンドレットの一覧表示…Get-Command
 ヘルプ…Get-Help (エイリアスはHelp)
 Get-Help Get-EventLog
 Get-Help Get-EventLog -Detailed…詳細説明
 Get-Help Get-EventLog -Examples…使用例の表示
4. PowerShell基本文法
18
 オブジェクト
 プロパティとメソッド
 変数
 PowerShellの演算子
 スクリプトブロック
 関数
 繰り返しと条件分岐
PowerShell基本文法: オブジェクト
19
 オブジェクト = データ + 機能(手続き)
 PowerShell コマンドレットの実行結果
 オブジェクトの種類に応じた型を持つ
 型に対応したデータと機能(手続き)を持つ
 デフォルト表示文字列を持つ
(実行結果の表示などに利用)
データ
データ
データ
PowerShell基本文法: プロパティとメソッド
20
 プロパティ(データ)
 オブジェクトが保持する内部データへのアクセス窓口
 オブジェクト.プロパティ名で指定 (ピリオドで区切る)
 メソッド(手続き)
 オブジェクトが持つ機能
 オブジェクト.メソッド名(引数1, 引数2, …)
 オブジェクトとメソッドに依存した0以上の引数
データ
データ
データ
プロパティ メソッド
PowerShell基本文法: プロパティとメソッド(使用例とパイプ処理)
21
 日付オブジェクトのプロパティとメソッド
1. 現在日時のオブジェクトを取得
- $currentDate = Get-Date
2. 取得したオブジェクトのメンバを表示
- Get-Member –InputObject $currentDate
3. Yearプロパティから年データを取得
- $currentDate.Year
4. AddDaysメソッドで10日後の日付を計算
- $currentDate.AddDays(10)
 パイプ…出力オブジェクトを次のコマンドレットの入力に
 $currentDate | Get-Member
PowerShell基本文法: 変数
22
 変数名…$で始まり、英数字_(アンダースコア)が続く
 オブジェクトを格納
 動的型変換
 明示的な型指定…[型名]変数名
 型名は.NET Frameworkに準拠(エイリアスあり)
 配列を代入すると自動的に配列になる
 $x = Get-ChildItem …カレントディレクトリのファイルすべて
 $x[0]…最初の要素(配列でない場合も可)
 $x.Length…要素の数 $x[0]
$x[1]
$x[2]
$x[3]
$x[4]
$x $x.Lengthは5
PowerShell基本文法: PowerShellの演算子
23
 算術演算子…数値に関する演算
 +、-、*、/、%
 例: $x=40+20
 文字列演算子…文字列操作、検索、置き換え
 +(連結)、*(文字列反復)、-replace(文字列置換)、
-like(ワイルドカードマッチ)など
 例1: $x = "Hello"+"World“
 例2: $x = "abcd" –replace "bc","123"
 代入演算子…変数への値の代入
 =(代入)、+=(追加)、-=(削除)、*=(乗算)、/=(除算)
 例1: $a=10
 例2: $a+=5 …… $a = $a+5
PowerShell基本文法: PowerShellの演算子(続き)
24
 比較演算子…等価、大小関係
 -eq(=)、-ne(≠)、-gt(>)、-lt(<)、-ge(≧)、-le(≦)など
 論理演算子…論理積、論理和、排他的論理和、否定
 -and(論理積)、-or(論理和)、-xor(排他的論理和)、
-not(否定)
 ビット演算子…ビット単位の論理演算
 -band(ビット単位の論理積)、
-bor(ビット単位の論理和)など
 その他
 Help About_Operatorsで確認可能
5. オブジェクト操作のためのコマンドレット
25
 ForEach-Object
 Where-Object
 Sort-Object
 Select-Object
オブジェクト操作のためのコマンドレット: ForEach-Object
26
 パイプを通して入力された各オブジェクトにアクセス
 アクセスしたオブジェクトは $_ 自動変数に格納される
Get-ChildItem -Path C:¥Windows¥*.exe | ForEach-Object {$_.Name}
オブジェクト
$_
$_
$_
$_
各オブジェクトに
アクセス
オブジェクト操作のためのコマンドレット: Where-Object
27
 パイプ入力から、指定条件にあるオブジェクトを選択
 アクセスしたオブジェクトは $_ 自動変数に格納
 比較演算を使用して選択
 以下の表記も可
Get-ChildItem -Path C:¥Windows¥* | Where-Object{ $_.Length –ge 1MB }
オブジェクト
$_
$_
$_
$_
各オブジェクトに
アクセス
Get-ChildItem -Path C:¥Windows¥* |? Length –ge 1MB
オブジェクト操作のためのコマンドレット: Sort-Object
28
 パイプ入力から、指定プロパティ値に基づき並べ替える
 スイッチパラメータ
 -Descending…降順に並べ替え(既定は昇順)
 -Unique…重複を取り除き、一意なメンバーを返す
Get-ChildItem -Path C:¥Windows¥* | Sort-Object -Property Length -Descending
オブジェクト
各オブジェクトに
アクセス
4
3
2
1
オブジェクト操作のためのコマンドレット: Select-Object
29
 パイプ入力から、各オブジェクトの指定プロパティを選択
 スイッチパラメータ
 -First…オブジェクト配列の先頭からの個数を指定
 -Last…オブジェクト配列の末尾からの個数を指定
 -Unique…重複したプロパティ値を取り除く
Get-ChildItem -Path C:¥Windows¥* | Select-Object Name , Length
オブジェクト
Name,Length
各オブジェクトに
アクセス
Name,Length
Name,Length
6. スクリプト実行ポリシー
30
 不用意にスクリプトを実行しない仕組み
 実行ポリシーの種類
 Restricted(既定)
 AllSigned
 Remote Signed(おすすめ)
 Unrestricted
 Bypass
 スコープ
 Process
 CurrentUser
 LocalMachine(既定)
 ポリシーの変更コマンドレット[管理者として実行]
 Set-ExecutionPolicy
7. PowerShellモジュール
31
 PowerShellの拡張機能
 Import-Moduleコマンドレットで組み込み
 Windows Server 2012以降は自動実行(一部例外あり)
- 例: Import-Module ServerManager
 モジュール名はフォルダー名(大文字小文字の区別なし)
 主なモジュール
 ServerManager…サーバー管理
 ActiveDirectory…Active Directoryドメインサービス
 Hyper-V…Hyper-V仮想マシン環境管理
 AzureRM…Microsoft Azure管理
PowerShellモジュール: ServerManager モジュール
32
 Windows Server用コマンドレット
 役割や機能の追加、削除を行う
 Import-Module ServerManager
 例:
 Get-WindowsFeature
 Add-WindowsFeature
 Remove-WindowsFeature
PowerShellモジュール: Active Directory モジュール
33
 Active Directory用コマンドレット
 名詞がADで始まる
 Get-Command -Noun AD*
 Import-Module ActiveDirectory
PS C:¥> Get-Command -Noun AD* | Select-Object Name
Name
----
Add-ADComputerServiceAccount
Add-ADDomainControllerPasswordReplicationPolicy
Add-ADFineGrainedPasswordPolicySubject
Add-ADGroupMember
Add-ADPrincipalGroupMembership
Clear-ADAccountExpiration
Disable-ADAccount
…
PowerShellモジュール: Active Directory モジュール(例)
34
 ドメインユーザーの作成
 New-ADUser
 ドメインユーザー情報の取得
 Get-ADUser
 ドメインユーザーの設定
 Set-ADUser
 ドメインユーザーのグループ追加と削除
 Add-ADPrincipalGroupMembership
 Remove-ADPrincipalGroupMembership
 操作マスターの移動(1コマンドで全役割を移動可能)
 Move-ADDirectoryServerOperationMasterRole
PowerShellモジュール: Hyper-Vモジュール
35
 Hyper-V用コマンドレット セット
 名詞がVMで始まる
 Get-Command -Noun VM*
 Import-Module Hyper-V
 例:
 New-VM
 Start-VM
 Stop-VM
 Set-VMSwitch
 動作中の全仮想マシンをシャットダウン
Get-VM |? State -eq “Running“ | ForEach-Object {Stop-VM $_}
PowerShellモジュール: AzureRMモジュール
Trainocate Japan, Ltd. All rights reserved. 36
 Azure(リソースマネージャー)用コマンドレット セット
 参考: クラシックモデルは「Azure」モジュール
 名詞がAzureRMで始まる
 Get-Command -Noun AzureRM*
 Install-Module AzureRM
 更新はUpdate-Module AzureRM
 例:
 Add-AzureRmAccount…Azureへログオン
 Select-AzureRmSubscription…サブスクリプションの指定
 Start-AzureRmVM…Azure仮想マシンの起動
 Stop-AzureRmVM… Azure仮想マシンの停止
まとめ
37
1. シェルに求められること
2. PowerShellの特徴
3. コマンドレット操作
4. PowerShell基本文法
5. オブジェクト操作のためのコマンドレット
6. スクリプト実行ポリシー
7. PowerShellモジュール
トレノケートのサービス紹介
38
 PowerShell関連の教育コース
 Windows PowerShell コマンド・スクリプト入門
~Windows Server 2012R2/2016対応~
 Windows PowerShell 実践
~Windows Server 2016対応~
 Windows Serverの管理系教育コース
 Windows Server 2016 のインストール、
ストレージとコンピュート(#23740)
 Windows Server 2016 の ID (#23742)
 Windows Server 2016 のネットワーク (#23741)
 Windows Server 2016 システム管理基礎 (前編) (後編)
 Windows Server 2012 システム管理基礎 (前編) (後編)

はじめてのPowerShell