Summary
普段使い用 PowerShell メモ
思惑
個人的には、 PowerShell はスクリプトをゴリゴリ書くよりも、
ちょこちょこ作業するのに向いていると思っている。
ただ、しばらく使っていないと忘れたりするので、そういうものをまとめてみる。
Linux で、grep とか使って、よくやりそうな感じのやつ。
共用パソコンなどの自分の環境以外でも使えることを想定しているので、
できるだけデフォルトの状態で、できるものに限定する。
また、普段使い想定なので、タイプ数を減らすのを優先していたりするので、
PowerShell の文法的には微妙なところも多少ある。
grep
それ Select-String
でできるよ
Select-String -Path .\foo.txt -Pattern "bar"
find -name hogehoge
それ(以下略
ls -r | where { $_.Name -match "hogehoge" }
cat
Get-Content .\foo.txt
最初から cat
がエイリアスに設定されてるはずなので、 cat
でも可
sort, uniq
Get-Content .\test.txt | Sort-Object | Get-Unique
# デフォルトのエイリアスを使って、↓みたいにも可能
cat .\test.txt | sort | uniq
wc -l
$(cat .\test.txt).Length
diff
Compare-Object $(cat .\a.txt) $(cat .\b.txt)
ただし、表示形式は微妙。 unified で見たい・・・
sed
Get-Content .\foo.txt | % { $_ -replace "posh","PowerShell" }
tail
# PowerShell 2.0
Get-Content .\error.log -Wait
# PowerShell 3.0+
Get-Content .\error.log -Wait -Tail 5
wget
(new-object net.webclient).DownloadFile("URL", "保存先の絶対パス")
新しめの PowerShell だと ↓ みたいにも可能
Invoke-WebRequest http://files.kaoriya.net/goto/vim74w64 -OutFile .\vim.zip
curl
Invoke-RestMethod -Uri "http://localhost:1234/poshcomplete/" -Method POST -Body "text=test"
unzip
# .NET 4.5+
# 末尾のセミコロンが無いと表示されないので付けています.付けていてもコードとしては動きます(どうみてもバッドノウハウw
[System.IO.Compression.Zipfile]::ExtractToDirectory("圧縮ファイルの絶対パス", "解凍先の絶対パス");
xargs
ls .\ | % { cat $_.FullName }
man
man Foo-Bar
その他便利そうなものを少し
なんとなくループ回したいときとか
"PS", "posh", "PowerShell" | % { echo $_ }
0..255 | % { echo $_ }
cat .\filepathlist.txt | % { cat $_ } # テキストファイルの中身を 1 行ずつループで回す
応答なし
kill -name iexplore
最終更新日時とかで絞り込みたいとき
# 30日以内に更新した1KB以上のファイル一覧
ls | where { ($(Get-Date) - $_.LastWriteTime).Days -lt 30 } | where { $_.Length -gt 1KB }
where で絞り込めるので、ファイルサイズとかで絞り込んだりする。
タイマー
$n = 3
timeout $($n * 60); shutdown -h
n 分後にハイバネーション
PowerShell as a "電卓"
1 + 2 + [Math]::Pow(2, 10)
普通に演算子を使って、単純な計算をしたり、 System.Math
を使って、いろいろしたり
ディレクトリの中の合計サイズ調べるとき
gci .\ | where { $_.PSIsContainer } | % { Write-Host -NoNewline ($_.Name + "`t"); (gci $_.Name -Recurse | measure -Property Length -Sum).Sum; }
.NET の確認
unzip とか、電卓の Math とかみたいに、.NET も呼べるので、ちょっとメソッド確認したいときとかに使える。
読み込まれていないものを使いたいときは、 Add-Type -AssemblyName System.HogeHoge
みたいにして読み込んで使う。
履歴からスクリプトを作る元を出力する
インタラクティブに実行していって、それを出力して編集してスクリプト作る
Get-History | % { Out-File -InputObject $_.CommandLine -Encoding default -Append ~/foobar.ps1 }
jq
jq みたいなことできるコマンドも、比較的新しいバージョンならできる。
オブジェクトで返ってくるので便利。
csv とかも、オブジェクトで返ってくるコマンドレットがあるので便利。
説明が面倒なので、下記のリンク先を見るとか、ググるとかしてください。
PowerShell で JSON をファイル入出力 する - tech.guitarrapc.cóm
eject
(New-Object -com WMPlayer.OCX.7).cdromCollection.Item(0).Eject()
(☝ ՞ਊ ՞)☝ウイーン
おわりに
ここまで書いて気がついたけど、オライリーのクックブックに、似たようなこと書いてた(分量が全然違うけど
他にも、見なおしてみたら、役に立ちそうなこと書いてあったから、再読するべき。
この手のシェルを使って仕事するのと、マウスでクリッククリックしまくって手作業で仕事を処理するのとでは、
効率が全然違うので、面倒な仕事は、さっさと終わらせて、本質的な作業に時間を割けるようにしたいですね。