SlideShare a Scribd company logo
1 of 41
Windows PowerShellスクリプト作成の基礎知識
2015年3月28日
株式会社アスラ 林 茂之
(Windows PowerShellを紐解くシリーズ 第3回目)
I try to tease the Windows PowerShell
自己紹介
氏名 林 茂之 (はやし しげゆき)
得意分野
インフラ構築
プロジェクトマネージメント
今の仕事 会社経営
趣味 読書(ゴルゴ13 他)
お酒(洋酒、日本酒、焼酎など全般)
特徴 アイドル好きが痛い46歳
まゆゆ 押し歴 5年
本日のアジェンダ
Windows PowerShellスクリプト作成の基礎知識
1.これまでのおさらい
2. Windows PowerShellスクリプトの特徴
3.PowerShellで扱う変数
4.PowerShellの制御構文
5.PowerShellスクリプトの実行例
1.これまでのおさらい
2015年1月17日(秋田)、1月24日(品川)で「Windows PowerShellを紐解く」と題し、
PowerShell開発の歴史とPowerShellの高度な管理機能について説明しました。
その「おさらい」を少しだけ。
1.PowerShellはWMI(Windows Management Instrumentation)を利用して、オブジェクト
(Registry、Event Log、IIS、Cluster etc.)を操作する
→ コマンドレットを実行すると、.NET Frameworkのオブジェクトを返す
2.PowerShellはコマンドレット(PowerShellに用意された命令)を使って処理を実現する
3.コマンドレットは「動詞」-「名詞」の形式で記述する
例:Get-Process
4.コマンドレットは、パラメータを指定して処理を実行することができる
例:Get-Process –Name explorer
これまでのおさらい
2.Windows PowerShellのスクリプトの特徴
PowerShellのスクリプトファイル
スクリプトファイルの基本は、単純なプレーンテキストファイル
プレーンテキスト(Plain text)とは、コンピュータ上で文書を扱うための一般的なファイル
フォーマット。本文以外に付加情報(レイアウト情報など)を持たない単純に文字だけで構成
される。
例 ○ Windowsのメモ帳(notepad)
× HTML
PowerShellのスクリプトファイルも、Windowsのメモ帳で作成することができる。
「スクリプト」と難しそうな名前で呼ばれているが、その実態はファイルとして保存された
コマンドレットの集合体といった一面もある。
PowerShellのスクリプト
PowerShellのスクリプトファイルの拡張子は .ps1
Windows PowerShellでスクリプトファイルを作成する場合、拡張子は .ps1 となる
例: hogehoge_script.ps1
【特徴】
ps1の「1」は、PowerShellのバージョンではなく、言語エンジンのバージョンを
表している。
PowerShellのスクリプト
PowerShellのスクリプトファイルを使用する際の注意点
1.拡張子.ps1のスクリプトファイルは、ダブルクリックしても実行されない。
ダブルクリックによるウィルス実行(展開)を回避する目的があるとも言われている
2.カレントフォルダを検索しない
フルパスで指定か、「./<スクリプト名>」で実行
例: ./PowerShellTest.ps1
※コマンド・プロンプトでは、ファイル名の指定のみで実行可能
3.スクリプト実行ポリシーを設定する
→ これを適切に設定しないとPowerShellスクリプトは起動しない
PowerShellのスクリプト
PowerShellのスクリプトファイルを使用する際の注意点
現在の実行ポリシーを確認する
→ Get-ExecutionPolicy コマンドレットを使用した確認
PowerShellを「管理者として実行する」
Get-ExecutionPolicyコマンドレット
を実行し、現在の設定を確認する
PowerShellのスクリプト
PowerShellのスクリプトファイルを使用する際の注意点
スクリプト実行ポリシーを設定する
→ Set-ExecutionPolicy <引数>
引数 引数の詳細
Restricted
すべてのスクリプトを実行不可。PowerShell、Windows OSインストール
時のデフォルト設定(Windows Server 2012 R2を除く)
AllSigned 署名されているスクリプトのみ実行可能
RemoteSigned
インターネット経由からダウンロードした署名のあるスクリプトのみ実行可
能
Unrestricted
すべてのスクリプト実行を許可(ただしインターネット経由でダウンロード
したコードは実行確認のみあり)
Bypass 警告やユーザへの確認なしに、すべてのスクリプトが実行可能
PowerShellのスクリプト
PowerShellのスクリプトファイルを使用する際の注意点
スクリプト実行ポリシーを設定する
→ Set-ExecutionPolicy コマンドレットを使用した設定
PowerShellのスクリプト
PowerShellのスクリプトファイルを使用する際の注意点
そして・・・
そして・・・
そして・・・
Surface RTでは、PowerShellで実行できる機能に制限があります。
これは最後に。
3.PowerShellで扱う変数
PowerShellで扱う変数
PowerShellで扱う変数の特徴
1.基本事項(お約束)
PowerShellに限らず、スクリプトを記述するうえで大事なものが「変数」である。
PowerShellにおいては、他のスクリプトと同様、あらかじめ変数の宣言をする必要はない。
(注意) VBScriptは変数宣言が必要(らしいですね)
2.変数の命名規則
① 先頭文字が「$」で始まること
② 2文字目以降は任意の英数字、またはアンダースコアであること
例 ${DotNetLabo}
$_
PowerShellで扱う変数
PowerShellで扱う変数の特徴
3.変数のデータ型
PowerShellはデータ型を区別しない言語である。
→ データ型を宣言する必要はないが、宣言することについても何ら問題はない。
→ 宣言しない場合は、PowerShellが自動的に正しいデータ型にしてくれる。
→ Get.Typeメソッドで確かめる
$x = 123
$x.GetType() ← .NET Frameworkの Object.GetType メソッド
でも。ちょっと問題もある。
PowerShellで扱う変数
PowerShellで扱う変数の特徴
4.加算演算子を使用する際の注意点
PowerShellはデータ型を区別しない言語である。
→ Get.Typeメソッドで確かめる
正しいデータ型にしてくれている例
PowerShellで扱う変数
PowerShellで扱う変数の特徴
4.加算演算子の注意点
PowerShellはデータ型を区別しない(動的認識する)言語である。が!注意しないといけない
こともある。
それは「 + 」(足す)です。
PowerShellの「 + 」には、加算演算子と文字列連結演算子の役割がある。
PowerShellで扱う変数
PowerShellで扱う変数の特徴
4.加算演算子の注意点
記述上の注意が必要。覚えてしまえば問題ないことだが、複雑なコードになる場合、
誤りを生む原因になる。
「文字列」+「数値」の場合の
演算結果
「数値」+「文字列」の場合の
演算結果
PowerShellで扱う変数
PowerShellで扱う変数の特徴
4.加算演算子の注意点
先の問題については、変数の型を宣言して回避することができる
Int型(整数型)を宣言する
変数に小数点のある値を入れる
四捨五入した値に変換される
Int型(整数型)を宣言した変数に文
字列を入れると、変換できずエラー
になる
PowerShellで扱う変数
PowerShellで扱う変数の特徴
5.文字列の展開
シングルクォート/ダブルクォートの使い方
変数値をダブルクォートで囲むと、コマンド
レットの実行結果として「変数展開」が行わ
れる
変数値をシングルクォートで囲むと、コマン
ドレットの実行結果として、そのまま出力さ
れる
PowerShellで扱う変数
PowerShellで扱う変数の特徴
5.文字列の展開
シングルクォート/ダブルクォートの使い方
(エスケープシーケンスはどうなるか? `n(改行)の場合)
変数値をダブルクォートで囲むと、コマンド
レットの実行時にエスケープシーケンスが認
識される
変数値をシングルクォートで囲むと、コマン
ドレットの実行エスケープシーケンスが認識
されない
PowerShellで扱う変数
PowerShellで扱う変数の特徴
6.ヒア・ドキュメント
ヒア・ドキュメント(here document)とは、大量のテキストをスクリプト内で記述する
仕組み。
記載方法:@”<改行>~<改行>“@ もしくは @’ <改行>~<改行>’@
ヒア・ドキュメントの開始
変数$docに下記のテキストを格納する
ヒア・ドキュメントの終了
PowerShellで扱う変数
PowerShellで扱う変数の特徴
7.変数の値の削除
変数にセットされた値の削除
Remove-Variable コマンドレットの後に変数名をつける
(注意)「$」はつけません。
Remove-Variable abc
PowerShellで扱う変数
PowerShellで扱う変数の特徴
8.配列(array)
ある関係を持つ複数の値を格納できる変数
記述方法 @(要素,要素,要素)
$array = 1,2,3,4 と書いても良い。
オブジェクトを「,」で区切れば配列になる。
配列の先頭を0と数えることに注意する。
PowerShellで扱う変数
PowerShellで扱う変数の特徴
9.連想配列(assosiative array)
配列内にあるデータにアクセスする際、添え字にスカラー数値以外のデータ型(文字列
など)を使用できる配列
記述方法 @{キー名=値;キー名=値;‥‥}
LOCATIONの値を出力
4.PowerShellの制御構文
(代表的なものをとりあげて)
PowerShellの制御構文
PowerShellの制御構文について
1. 条件分岐処理(if文)
PowerShellにおける条件分岐は「if , elseif , else」で構成される
If (条件) {
ifが満たされた場合に実行される処理
} elseif (条件) {
elseifの条件が満たされた場合に実行される処理
} else {
ifの条件も、elseifの条件も満たされない場合に実行される処理
}
PowerShellの制御構文
PowerShellの制御構文について
2. 条件分岐処理(switch文)
Switch文は、処理を分岐するほか、パターン照合や反復を行うことができる
Switch –options (評価する式)
{
<パターン> { 実行する処理 }
<パターン> { 実行する処理 }
:
default { 実行する処理 }
}
PowerShellの制御構文
PowerShellの制御構文について
2. 条件分岐処理(switch文)
Switch文は、処理を分岐するほか、パターン照合や反復を行うことができる
パターン照合で一致する例 パターン照合で不一致になる例
PowerShellの制御構文
PowerShellの制御構文について
3. ループ処理(for文)
基本的なループ構文
for (初期化; 条件; 繰り返し処理)
{
繰り返し実行する処理
}
4. ループ処理(while文)
指定した条件がtrue(真)の場合にループする構文
while (条件)
{
繰り返し実行する処理
}
5.PowerShellスクリプトの実行例
(そして最後に)
PowerShellスクリプトの実行例
フォルダの容量を取得し、Excel (csvファイル)へ出力する
Get-ChlidItemコマンドレットの実行時、フォルダの容量(Length)が表示されない。
そこで、フォルダ容量を算出し、Excelへ出力する。
PowerShellスクリプトの実行例
フォルダの容量を取得し、Excel (csvファイル)へ出力する
スクリプトの記載例
Set-Location -path C:work
$filename = "C:workFolderSize.csv"
$output = Get-ChildItem | Select-Object Name,
@{name="Size(byte)";expression={(Get-ChildItem $_.FullName -Recurse -Force |
Measure-Object Length -Sum).Sum}}
$output | Export-Csv $filename
Invoke-Item $filename
PowerShellスクリプトの実行例
フォルダの容量を取得し、Excel (csvファイル)へ出力する
DEMO
PowerShellスクリプトの実行例
Internet Explorerを起動後、検索サイトを表示しキーワード検索を行う
スクリプトの記載例
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate('http://www.bing.com/')
While($ie.Busy) { [Threading.Thread]::Sleep(300) }
:
:
ここで、思い出してください
PowerShellスクリプトの実行例
Internet Explorerを起動し、検索サイト bing を表示する
スクリプトの実行例
New-Object : 型を作成できません。この言語モードでは、コアの型のみがサポートされています。
発生場所 C:workPS_TESTIE.ps1:1 文字:7
+ $ie = New-Object -ComObject InternetExplorer.Application
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [New-Object], PSNotSupportedException
+ FullyQualifiedErrorId : CannotCreateComTypeConstrainedLanguage,Microsoft.PowerShell.
Commands.NewObjectCommand
PowerShellスクリプトの実行例
Surface RT(Windows RT)での制限
「この言語モードでは、コアの型のみがサポートされています。」について
RunSpaceの言語モードの違い
Surface RT(Windows RT)の場合は、「ConstraindLanguage」
Windows 8などの場合は、「FullLanguage」
因みにConstraindとは・・・
「制限付き」という意味
まとめ
1.スクリプト実行ポリシーを設定する
Get-ExecutionPolicy コマンドレットを使用した確認
Set-ExecutionPolicy コマンドレットを使用した設定
2.変数や配列の考え方は、他の言語と共通するものが多くコーディング経験
があれば、比較的早く理解・操作ができる
3.スクリプトの実行は、フルパスで指定か、「./<スクリプト名>」で実行
例: ./PowerShellTest.ps1
4.Windows RTの場合、機能に制限がある点に注意
参考文献・参考Webサイト
Windows PowerShell クックブック (オライリー・ジャパン)
PowerShellの基礎 (@IT)
http://www.atmarkit.co.jp/ait/articles/1004/15/news106_2.html
PowerShellスクリプティングの第一歩 (@IT)
http://www.atmarkit.co.jp/ait/articles/0709/20/news125.html
PowerShellスクリプトの作成と実行 (Capm Network)
http://capm-network.com/?tag=Windows設定
Windows PowerShell入門 (Code Zine)
http://codezine.jp/article/detail/2388
PowerShell 逆引きリファレンス
http://powershell.web.fc2.com/Html/Data/2011/11/03/0000.html
tech.guitarrapc.com
http://tech.guitarrapc.com/
GitHub Gist
https://gist.github.com/n-fukuju/8487498

More Related Content

What's hot

C34 Always On 可用性グループ 構築時のポイント by 小澤真之
C34 Always On 可用性グループ 構築時のポイント by 小澤真之C34 Always On 可用性グループ 構築時のポイント by 小澤真之
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
Insight Technology, Inc.
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
Microsoft
 

What's hot (20)

aws lambdaでpythonを実行するときのチューニング案を試してみた!
aws lambdaでpythonを実行するときのチューニング案を試してみた!aws lambdaでpythonを実行するときのチューニング案を試してみた!
aws lambdaでpythonを実行するときのチューニング案を試してみた!
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
C34 Always On 可用性グループ 構築時のポイント by 小澤真之C34 Always On 可用性グループ 構築時のポイント by 小澤真之
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
 
Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門
 
俺のサイジング
俺のサイジング俺のサイジング
俺のサイジング
 
Azure Cosmos DB のキホンと使いドコロ
Azure Cosmos DB のキホンと使いドコロAzure Cosmos DB のキホンと使いドコロ
Azure Cosmos DB のキホンと使いドコロ
 
(Fix)Azure Network Security Group(NSG)のおさらい
(Fix)Azure Network Security Group(NSG)のおさらい(Fix)Azure Network Security Group(NSG)のおさらい
(Fix)Azure Network Security Group(NSG)のおさらい
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 
AWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザAWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザ
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
 
[Cloud OnAir] Google Cloud で実現するバックアップ ディザスタリカバリのベストプラクティス 2019年4月25日 放送
[Cloud OnAir] Google Cloud で実現するバックアップ ディザスタリカバリのベストプラクティス 2019年4月25日 放送[Cloud OnAir] Google Cloud で実現するバックアップ ディザスタリカバリのベストプラクティス 2019年4月25日 放送
[Cloud OnAir] Google Cloud で実現するバックアップ ディザスタリカバリのベストプラクティス 2019年4月25日 放送
 
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法についてAzure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
 
初心者でもわかるActive directoryの基本
初心者でもわかるActive directoryの基本初心者でもわかるActive directoryの基本
初心者でもわかるActive directoryの基本
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
 
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 

Recently uploaded

Recently uploaded (7)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

04 windows powershellスクリプト作成の基礎知識