PowerShell(.ps1)で使える、意外と便利なコマンド集

2019年6月17日PowerShell, Windows, 便利ツール

Windowsにデフォルトで入ってる「Windows PowerShell」というコマンドライン。使ったことありますか?

ぱわーしぇる?なにそれ?という人に説明するなら、「超スゴいコマンドプロンプト(ハッカーが使ってそうな黒い画面)」みたいな感じのヤツです。

.Netが使えて開発環境(Windows PowerShell ISE)も最初から入ってるので、使い方次第ではバッチより数十倍使利でC#より数倍開発が楽ちんなプログラミング言語でありスクリプトなんです。

今回は僕がPowerShellを使って幸せになったいくつかの機能を招介します。

個人的によく使うPowerShellコマンド集

外部.ps1の実行

. .\shell2.ps1

. (参照するps1のパス)

同じ処理や定数定義などを別ファイルにして、インポートみたいに使うことができます。
Import-Module .\shell2.ps1と同じ動きです。

指定秒数、処理を待機する(スリープ)

Start-Sleep -Seconds 5

Start-Sleep -Seconds (待機秒数)

数秒待機して次の処理に行きたいとき。ファイルのIOに関わる場合やリモート接続したり並行処理したりする場合には特に頻繁に使うと思います。

C#クラスライブラリ(.dll)のメソッドを実行する

[System.Reflectlon.Assembly]::LoadFile(.\class.dll)
$c = New-Object "NameSpace.Class"
$c.method1("param1", "param2")

[System.Reflectlon.Assembly]::LoadFile((dllパス))
$c = New-Object “(名前空間).(クラス名)”
$c.(メソッド名)((パラメータ))

PowerShellの大きな特徴の一つでもありますが、.Netのクラスが呼べます。自分で作った.Netライブラリ(dll)を直接呼べるので、できる事はほぼ無限大です。まっさらなPCでもいろいろ開発できる余地があるのはすごいですね!

指定フォーマットで日付取得

Get-Date -UFormat "%Y/%m/%d %H:%M:%S"

Get-Date -UFormat (日付フォーマット)

出力結果  =>  2019/06/16 15:31:34

特に凄いことはしてませんが、頻繁に使うので。

サイトのステータスコードを取得

(Invoke-WebRequest -Uri 'http://sample.com').StatusCode

タスクスケジューラとかに登録して一定間隔でサイトの状態を監視してログに吐いてくれるみたいなことができますます。

残念なことにhttpsのサイトに投げるとエラーします。

JSON形式でファイル出力

@{
    date = Get-Date -UFormat "%Y/%m/%d %H:%M:%S"
    comment = "OK"
} | ConvertTo-Json | Out-File C:\users\User\desktop\log.json -Append

出力結果

{
    "comment":  "OK",
    "date":  "2019/06/17 22:59:48"
}

txtやcsvファイルじゃなくてjson形式で複数項目を出力してくれたら嬉しい人向き。

一定期間更新されなかったファイルを削除する

Get-ChildItem C:\users\User\desktop\log |
Where-Object{($_.Mode -eq "-a----") -and ($_.LastWriteTime -lt (Get-Date).AddDays(-30))} |
Remove-Item -Force

Get-ChildItem (フォルダパス) |
Where-Object{($_.Mode -eq (種類)) -and ($_.LastWriteTime -lt (Get-Date).AddDays((日数)))} |
Remove-Item -Force

無限に溜まっていく何か(主にログ)を討伐するコマンド。指定した期間より昔のファイルを確認なしでゴミ箱も介さず抹消してくれます。消されたらマズイものがあるフォルダは指定しないでください!

さいごに

こんなところでしょうか!

日常的に同じ作業を頻繁にしなきゃいけないときとか、「自動化=バッチ」というイメージもあると思いますが、batだけではちょっと手が届かないときや、更に幸せ感じたいときはPowerShellも思い出してあげてください。