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
31
PowerShell 紹介
LT駆動開発 #10 で発表した、簡単な PowerShell の紹介です。
tsuda.a
January 11, 2015
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
マジカルインクリメントと指数表記
tsudaahr
0
190
バックアップしていますか?
tsudaahr
0
120
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
120
NPUわからん
tsudaahr
0
180
計算量オーダーの話
tsudaahr
1
390
クラウド初学者が抱える不安について
tsudaahr
0
260
キューとは何か
tsudaahr
0
230
等幅は死んだ(ぇ
tsudaahr
0
99
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
180
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
A Modern Web Designer's Workflow
chriscoyier
697
190k
KATA
mclloyd
32
15k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
Making Projects Easy
brettharned
119
6.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
GitHub's CSS Performance
jonrohan
1032
470k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Music & Morning Musume
bryan
46
6.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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 のセッションもあるよ!
この本を書かれた方が来られます!
この機会に是非ご参加ください!