Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PowerShell 紹介
Search
tsuda.a
January 11, 2015
0
27
PowerShell 紹介
LT駆動開発 #10 で発表した、簡単な PowerShell の紹介です。
tsuda.a
January 11, 2015
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
マジカルインクリメントと指数表記
tsudaahr
0
150
バックアップしていますか?
tsudaahr
0
100
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
110
NPUわからん
tsudaahr
0
160
計算量オーダーの話
tsudaahr
1
370
クラウド初学者が抱える不安について
tsudaahr
0
230
キューとは何か
tsudaahr
0
210
等幅は死んだ(ぇ
tsudaahr
0
83
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
170
Featured
See All Featured
Balancing Empowerment & Direction
lara
1
240
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
42
2.4k
Adopting Sorbet at Scale
ufuk
77
9.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
A Modern Web Designer's Workflow
chriscoyier
693
190k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
KATA
mclloyd
29
14k
Bash Introduction
62gerente
614
210k
How to train your dragon (web standard)
notwaldorf
92
6.1k
Being A Developer After 40
akosma
90
590k
Writing Fast Ruby
sferik
628
61k
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 = 100 00020 IF
(I .GT. 1) THEN 00030 PRINT *, "True" 00040 END IF 00050 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 のセッションもあるよ!
この本を書かれた方が来られます!
この機会に是非ご参加ください!