Download - PowerShell 紹介

Transcript

PowerShell紹介LTDD #10

@tsuda_ahr

PowerShell とは• Microsoft の Shell Script のようなもの

•コマンドプロンプトの後継(WSH/VBScript の後継)

• Windows 7 以降は標準搭載。

•専用エディタもついてくるよ!

PowerShell ISE

(Integrated Scripting Environment)

利点• .netのライブラリが Script のように使えること。

個人的にはこれ一択!

例$tcp = New-Object System.Net.Sockets.TcpClient

try {

$tcp.Connect("localhost", 445)

Write-Host ("成功")

} catch {

Write-Host ("失敗")

} finally {

$tcp.Close()

$tcp.Dispose()

}対象の host の TCP ポートを開いてみる Script

.netのライブラリ

ちまたで言われている利点• pipe に Object を渡せる

•コマンドプロンプト (cmd.exe) とは比較にならない制御が可能(=一般的な言語ができることができる)

•コマンドプロンプトの後継。

• Azure API などが操作できる。

• Windows Server では一部 PowerShell Script に変換する機能がある(らしい)

例) object が pipe を渡っているの図Get-Content .¥sample.csv |

ConvertFrom-Csv -Header @(1..50) |

Where {$_."3" -ge 1989} |

select "1","2","16","26","30" |

Out-GridView

sample.csv を読み込み、csv ファイルとして解釈し3列目が 1989 以上の行の1列目,2列目,16列目,26列目,30列目をGridViewで表示する

残念な点

1.拡張子とインストールフォルダ

最新のPSのバージョンは現在 “4”

順調に進化しています

しかし拡張子は.ps1のまま

インストールフォルダも v1.0 のまま

2.関係演算子

PERL の場合

$a = 100;

if ($a > 1) {print "True";

}

PowerShell の場合

$a = 100;

if ($a –gt 1) {Write-Host "True";

}

FORTRAN かよ!

参考) FORTRAN 77 の場合

00010 I = 10000020 IF (I .GT. 1) THEN00030 PRINT *, "True"00040 END IF00050 END

3.セキュリティ縛り

ポリシーがデフォルトのままだと、Scriptファイル(.ps1) を実行できません

4.コマンドプロンプトに劣る面がある

屈辱の

cmd /c mklink

たとえばシンボリックリンクを作るコマンドレットは存在しない。

5.Windows の設定は、変わらず難儀

たとえば、ここのチェックを入れるための

API とかは存在しない

6.コマンドが長い

まとめ• Windows の設定がらみのところでは、まだまだコマンドプロンプト有利なところが結構ある。

•自前 Script を書く場合は、PowerShell になれるとコマンドプロンプトには戻れない。

•テキスト処理とかも PERL を使ったりすることはなくなった。

みんな PowerShell を使おう!

セッション中にあった質問と回答

質問1) pipe で渡ったオブジェクトの型はわかるのか?

一応わかりますが、パターンマッチとはまではできません(多分)

質問2) PowerShell で Excel は操作できるのか?

•できないことはないけれど、Powershell で実施することによるメリットはあまりないよ。何より遅い(汗

powershell

# Excelの起動ほか

$excel = New-Object -ComObject Excel.Application

$excel.Visible = $false

$book = $excel.Workbooks.Open("D:¥sample.xlsx")

$sheet = $book.Worksheets.Item("sheet1")

# 書き込み

$sheet.Range("A1").Cells.Item(1, 1) = "AAA"

# 読み込み

$a = $sheet.Range("A1").Cells.Item(1, 1).Text

Write-Host $a

# 閉じる

$book.Save()

$excel.Quit()

# Excel.exe がプロセスに残るのを防ぐために Powershell ごと終了する(ぉぃ

exit

質問3) あるフォルダにファイルができたことをトリガーに処理することができるか?

できないことはないです…(実現にはやはり .netのライブラリの力を借ります。

また以下のコードだと複数のファイルが同時に操作された場合に取りこぼします)

$watcher = New-Object System.IO.FileSystemWatcher

$watcher.Path = "D:¥test"

while ($true) {

$result = $watcher.WaitForChanged([System.IO.WatcherChangeTypes]::All)

Write-Host $result.ChangeType $result.Name

}

ステマ。

来る 2015/2/14 (土) オープンセミナー広島が開催されます。

http://osh-web.github.io/

PowerShell のセッションもあるよ!

この本を書かれた方が来られます!

この機会に是非ご参加ください!


Top Related