Post on 22-Jul-2015
PowerShell とは• Microsoft の Shell Script のようなもの
•コマンドプロンプトの後継(WSH/VBScript の後継)
• Windows 7 以降は標準搭載。
•専用エディタもついてくるよ!
PowerShell ISE
(Integrated Scripting Environment)
例$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で表示する
まとめ• Windows の設定がらみのところでは、まだまだコマンドプロンプト有利なところが結構ある。
•自前 Script を書く場合は、PowerShell になれるとコマンドプロンプトには戻れない。
•テキスト処理とかも PERL を使ったりすることはなくなった。
質問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
}