Chat GPT3にPowerShellの書き方を教えてもらう
概要
先日エントリで適当に書いたコードをChat-GPTさん(3)に直してもらえないか試しました。
巷でいわれている通り、何をしたいかを適切に言語化できれば「そうそうこんな感じ!」という感じのWaoな返答をもらえる嘘かどうか公式な情報も参照して検査できれば、Chat-GPTさん(3)とやりたいことを話しながら修正するのに向いていると思いました。修正したかった点
- 出力文
- ログファイル出力
1.出力文
指示
以下は1行で記載できますか
$hogeout = "System Disk MediaType: {0}, Free {1:N0}GB, USED{2:N0}GB" -f $hpd.MediaType,($hoge.free/1GB),($hoge.Used/1GB)
Write-Output $hogeout
回答
はい一行で記載できます。
Write-Output ("System Disk MediaType: {0}, Free {1:N0}GB, USED{2:N0}GB" -f $hpd.MediaType,($hoge.free/1GB),($hoge.Used/1GB))
検査
ありがとうございます。まぁ意味わかるし、大丈夫かなぁ
2.ログ出力
指示
スクリプトを実行する度にいか要件のログファイルを出力したいが可能か
ログファイルの内容はWrite-Output で標準出力したものすべて
ログファイルの保存先は実行カレントディレクトリにあるlogディレクトリ配下
ログファイルのファイル名は実行時点の日時を含む
回答
以下はPowerShellでログファイルを出力するスクリプト例です。
$logDirectory = Join-Path $PSScriptRoot "log"
$logFilename = "$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
$logPath = Join-Path $logDirectory $logFilename
if (-not (Test-Path $logDirectory)) {
New-Item -Path $logDirectory -ItemType Directory | Out-Null
}
Write-Output "ログファイルを作成しました: $logPath"
Start-Transcript -Path $logPath -Force
# ここに実行したいコードを記述
Stop-Transcript
このスクリプトを実行すると、まずログファイルの保存先であるlogディレクトリが存在するか確認し、存在しない場合は作成します。次に、実行時点の日時をファイル名に含むログファイルを作成します。ログファイルの作成に成功した場合は、そのファイルパスを標準出力に出力します。
Start-TranscriptとStop-Transcriptを使うことで、スクリプトの実行中に発生した標準出力やエラー出力をログファイルに書き込むことができます。-Pathパラメータには作成したログファイルのパスを指定し、-Forceオプションを指定することで既に同名のログファイルが存在する場合でも上書きするようにします。Stop-Transcriptを呼び出すことで、ログの記録を終了します。
検査
解説までしてくれるなんて親切なんだ。
Get-Date -Format 'yyyyMMdd_HHmmss'
そうこういう風にエレガントに書きたいですね
一応参考資料で索引を引いて妥当な提案だと思われる
Join-Path
フォルダパスを安全に作成するにはこれですね。[1]
Start-Transcript
: トランススクリプトの保存開始 [2]
Stop-Transcript
: StartしたらStopですよね [3]
Test-Path
: bool値を返す[4]
Out-Null
: 出力を出さないようにするコマンドレット
実行結果
スクリプト自体の実行結果
トランスクリプトが開始されました。出力ファイル: *******
システム モデル: HP ProDesk 600 G1 SFF
OS 名: Microsoft Windows 10 Pro
Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
物理メモリの合計: 8,098 MB
利用できる物理メモリ: 2,724 MB
システムディスクの MediaType: SSD, Free 64GB, USED55GB
トランスクリプトが停止されました。
出力ファイル名をぼかしています。
ログフォルダに作られた様子
PS Get-ChildItem | Format-Table LastWriteTime, Name
LastWriteTime Name
------------- ----
2023/03/26 11:32:07 20230326_113201.log
2023/03/26 11:45:13 20230326_114507.log
普通にlsすると見づらいのでこれもChatGPTさんに聞きました。[5]
参考文献等
まとめ
コードについてちゃんと解説してくれるのとてもありがたいですが、あまり鵜呑みにせずに提示された知らないコマンドレットは公式情報を参照すべきですが、
ロースキルな身としては、うまく抽象化した要件を伝えてChatGPTさんとうまく付き合っていきたいと思います。
Discussion