■PowerShell 2.0 Top

PowerShellはコマンドプロンプトのようなコマンドラインインターフェース (CLI) シェルおよびスクリプト言語である。
.NET Frameworkを基盤としているため、C#などで使用できるクラスライブラリがそのまま使用できることが特徴である。

なお当サイトではなるべくコマンドレットは使用せず、.NET Framework のクラスライブラリを使用したサンプルを示す。(そのほうが楽なので)


1.スクリプトの実行

2.デバッグ

3.変数

4.入力

5.標準出力

6.プログラムの終了

7.if文

8.関数

9.new

10.指定フォルダ配下の全ファイルのフルパスを取得

11.拡張子を取得

12.ファイルIO

13.Listコレクション

14.コマンドライン引数


■スクリプトの実行

スクリプトの実行
PowerShellはスクリプト言語のため、テキストエディッタなどで開発する。
作成したファイルはps1という拡張子で保存後、PowerShell上で実行できる。

しかしPowerShellのデフォルト設定では実行ポリシーで制限されているためスクリプトファイルを実行できない。
管理者権限で起動した PowerShell 上で下記のコマンドを実行することで実行できるようになる。

Set-ExecutionPolicy RemoteSigned


■デバッグ

デバッグ
PowerShellのデバッグには 「Windows PowerShell ISE」を使用する。


■変数

変数の宣言
変数の宣言は$記号を使用する。型指定も可能。

型指定は[]で囲む。


[string] $str = "HIRO"


■入力

入力
Read-Hostコマンドを使用するとユーザーによる入力待ちとなる。
# 入力した値は $rootPath 変数に格納される。
[string] $rootPath = Read-Host "フォルダを指定してください。"

write-output($rootPath)


■出力

出力
コンソールに出力する
write-output("aaa")


■プログラムの終了

プログラムの終了
exitでプログラムを終了する
exit
write-output("aaa")


■if文

if文
<>=の表記がC#と異なる。<を使用すると「今後の使用のために予約されています。」とコンソールに表示されエラーになる。
# 1 == 1
if (1 -eq 1) {write-output("true")}
else         {write-output("false")}

# 1 != 2
if (1 -ne 2) {write-output("true")}
else         {write-output("false")}

# 1 < 2
if (1 -lt 2) {write-output("true")}
else         {write-output("false")}

# 1 <= 2
if (1 -le 2 -and 2 -le 2) {write-output("true")}
else                      {write-output("false")}

# 2 > 1
if (2 -gt 1) {write-output("true")}
else         {write-output("false")}

# 2 >= 1
if (2 -ge 1 -and 2 -ge 2) {write-output("true")}
else                      {write-output("false")}

# すべてtrue

&& 、 || はそれぞれ -and、 -or となる
# 1 <= 2
if (2 -le 2 -and 2 -le 2) {write-output("true")}
else                      {write-output("false")}

if (1 -le 2 -or 2 -le 2) {write-output("true")}
else                      {write-output("false")}

# すべてtrue


■関数

関数
function()
function check($str1, $str2){
   return $str1 + ":" + $str2
}

if (check("111", "222") == "111:222"){
   write-output("一致")
}

else{
   write-output("不一致")
}


■new

new
インスタンス生成時に使用する new は New-Object を使用する
[string] $filePath = Read-Host ファイルを指定してください。

[IO.StreamReader] $sr = New-Object IO.StreamReader($path, [Text.Encoding]::GetEncoding("UTF-8"))

while (!$sr.EndOfStream){
   write-output ($sr.ReadLine().Trim())
}


■指定フォルダ配下の全ファイルのフルパスを取得

指定フォルダ配下の全ファイルのフルパスを取得
.NET Frameworkのクラスライブラリを使用する方法を示す。
[]で囲んだ箇所がクラスライブラリの名前空間で::でクラスライブラリを指定する。

なお第2引数に指定する拡張子が3桁の場合は、拡張子が前方一致でヒットするファイルが対象となる仕様もそのままである。

ちなみにPowerShell 5.0から using namespace <名前空間> が使用できるようになったらしい。


[string] $rootPath = Read-Host フォルダを指定してください。

$files = [IO.Directory]::GetFiles($rootPath, "*.cpp", [IO.SearchOption]::AllDirectories)

foreach ($file in $files){
   write-output ($file)
}


■拡張子取得

ファイルパスから拡張子を取得する
ファイルの拡張子を取得する
[string] $filePath = Read-Host ファイルを指定してください。

write-output ([IO.Path]::GetExtension($filePath))


■ファイルIO

ファイル読み込み
ファイル読み込み
[string] $filePath = Read-Host ファイルを指定してください。

[IO.StreamReader] $sr = New-Object IO.StreamReader($path, [Text.Encoding]::GetEncoding("UTF-8"))

while (!$sr.EndOfStream){
   write-output ($sr.ReadLine().Trim())
}


■Listコレクション

Listコレクション
Listコレクション
$lists = New-Object Collections.Generic.List[string]

# 要素の追加
$lists.add("aaa")
$lists.add("bbb")

foreach($list in $lists){
   write-output ($list)
}

# aaa
# bbb

# 要素の削除
$lists.Remove("aaa")
foreach($list in $lists){
   write-output ($list)
}

# bbb


■コマンドライン引数

コマンドライン引数
コマンドライン引数を指定して PowerShell スクリプトを実行する手順を示す。

1.まずスクリプトであるps1ファイルのショートカットを作成する。

2.プロパティを開く。

3.リンク先を下記のように修正する。
  powershell -noexit D:\Sample\PowerShell\sample.ps1 123 456

  ちなみに-noexit はスクリプトが終了してもウィンドウを閉じないようにするパラメータ。


Param ([string] $aaa, [string] $bbb)

write-output ($aaa + ":" + $bbb)


Top
inserted by FC2 system