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

20170721 初めてのPowerShell