Windowsのトラブルを調べていると、
「PowerShellで確認できないかな?」
と思うことがあります。
そんなときChatGPTに、
「○○を確認するPowerShellコマンドを作って」
と質問すると、すぐにコマンドを作ってくれます。
非常に便利なのですが、ここで注意したいことがあります。
ChatGPTが作ったPowerShellコマンドを、内容を確認せずそのまま実行して大丈夫なのでしょうか?
特にWindows ServerやActive Directoryなどを管理している場合、コマンドによっては設定変更やファイル削除などが実行される可能性があります。
今回は、ChatGPTにPowerShellコマンドを作ってもらうときに私が注意しているポイントを紹介します。
ChatGPTはPowerShell作成にかなり便利
例えば、
「Windowsサービスの状態を確認したい」
とします。
ChatGPTへ、
「Windowsで実行中のサービスをPowerShellで確認したい」
と質問すると、例えば次のようなコマンドを提案できます。
Get-Service | Where-Object {$_.Status -eq "Running"}
このように、
やりたいことを日本語で説明してPowerShellへ変換する
という使い方は非常に便利です。
PowerShellの構文を完全に覚えていなくても、調査のきっかけを作れます。
しかし、すべてのコマンドが「確認するだけ」とは限りません。
一番怖いのは「意味を理解せず実行する」こと
例えば、ChatGPTから次のようなコマンドが提示されたとします。
Remove-Item C:\Temp\* -Recurse -Force
Remove-Itemはファイルやフォルダーなどを削除するために使用されるコマンドです。
さらに、
-Recurse
や、
-Force
が付いています。
PowerShellを普段使わない人が、
「ChatGPTが出したコマンドだから大丈夫だろう」
とコピーしてそのまま実行するのは危険です。
Get-で始まるから絶対安全、という意味ではない
PowerShellでは、
Get-Service
Get-Process
Get-ChildItem
Get-EventLog
など、Get-から始まるコマンドをよく使います。
一般的にGetは情報を取得するために使われる動詞です。
そのためトラブル調査では、まずGet-系のコマンドで状態を確認することが多くなります。
一方、
Set-
Remove-
Stop-
Restart-
Disable-
Enable-
New-
などを見かけたら、私は特に「何を変更するのか」を確認します。
ただし、
「Getなら必ず安全」「SetやRemoveなら必ず危険」
と単純に判断するのもおすすめしません。
コマンド全体、パラメーター、パイプ処理、呼び出しているスクリプトまで確認する必要があります。
ChatGPTに「まず確認だけ」と指定する
私はAIにPowerShellを作ってもらうなら、最初から条件を付けます。
例えば、
Windows Serverの○○を調査しています。
設定変更は行いたくありません。
現在の状態を確認するだけの
PowerShellコマンドを教えてください。
ファイル削除、サービス停止、
レジストリ変更、設定変更は行わないでください。
それぞれのコマンドが何を確認するものなのかも説明してください。
と質問します。
単に、
PowerShellコマンドを教えて
と聞くよりも、目的が明確になります。
コマンドを1行ずつ説明してもらう
少し長いPowerShellスクリプトを作ってもらった場合は、そのまま実行せず、
このPowerShellを1行ずつ説明してください。
各行について、
・何をしているのか
・システムに変更を加えるか
・ファイルを削除する可能性があるか
・サービスを停止する可能性があるか
・管理者権限が必要か
を説明してください。
と再度質問します。
AIに作らせて終わりではなく、
AIに作らせる → AIに説明させる → 自分で確認する
という使い方です。
Get-Commandでコマンドの情報を確認する
ChatGPTが知らないPowerShellコマンドを出してきた場合、そのコマンド自体が存在するのか確認します。
例えば、
Get-Command Get-Service
と実行します。
詳しいヘルプを確認するなら、
Get-Help Get-Service -Full
なども利用できます。
オンラインヘルプを利用できる環境なら、
Get-Help Get-Service -Online
という方法もあります。
AIの回答だけで判断せず、PowerShell自身のヘルプやMicrosoft公式ドキュメントも確認します。
-WhatIfが使えるコマンドなら事前確認する
PowerShellには便利な-WhatIfという仕組みがあります。
対応しているコマンドで-WhatIfを指定すると、
実際には変更せず「実行したら何が起きるか」を確認できます。
例えば、
Remove-Item C:\Temp\test.txt -WhatIf
とします。
対応している環境・コマンドであれば、実際に削除する代わりに、
「このファイルに対して削除操作を行う予定」
という内容を確認できます。
本当に削除する前の確認に便利です。
-WhatIfなら何でも安全、ではない
ここは重要です。
すべてのPowerShellコマンドが-WhatIfに対応しているわけではありません。
そのため、
何かのコマンド -WhatIf
と付ければ、どんなコマンドでも安全に試せるわけではありません。
まず、
Get-Help コマンド名 -Full
などで、-WhatIfが利用できるか確認します。
-WhatIfは、ShouldProcessをサポートするコマンドなどで利用できます。
また、外部プログラムをPowerShellから呼び出すスクリプトなどでは、スクリプト側の-WhatIfだけで外部プログラムの動作まで安全になるとは限りません。
「-WhatIfが付いているから大丈夫」と思い込まないことが重要です。
-Confirmという方法もある
PowerShellには-Confirmという共通パラメーターもあります。
対応するコマンドでは、
Remove-Item C:\Temp\test.txt -Confirm
のように指定すると、操作前に確認を求めることができます。
ただし、
-WhatIf
と、
-Confirm
では意味が違います。
-WhatIfは基本的に、
「実際には変更せず、何が起こるか確認する」
ものです。
-Confirmは、
「実際に操作する前に確認を求める」
ものです。
確認画面で許可すれば、実際の処理が行われます。
管理者として実行する前に一度考える
ChatGPTが、
「PowerShellを管理者として実行してください」
と回答する場合があります。
確かに管理者権限が必要な操作はあります。
しかし、
管理者権限で実行すれば解決する
という意味ではありません。
管理者権限を与えることで、通常ユーザーでは変更できなかった、
システム設定
サービス
レジストリ
保護されたファイル
ネットワーク設定
などへ影響を与えられる場合があります。
私はまず通常権限で状態を確認し、本当に必要な場合だけ管理者権限を使用するようにしています。
特に注意したいPowerShell
ChatGPTが次のような処理を提示した場合は、内容をよく確認します。
Remove-Item
Set-ItemProperty
Remove-ItemProperty
Stop-Service
Restart-Service
Disable-*
Remove-*
Set-*
Clear-*
Uninstall-*
例えばレジストリを書き換える、
Set-ItemProperty
も設定変更を行うコマンドです。
トラブル対応記事などで、
「このコマンドを実行すれば直ります」
と書かれていても、
何の値をどの値へ変更しているのか
を理解してから実行します。
パイプ「|」の後ろも確認する
PowerShellでは、
|
を使って処理をつなげることがあります。
例えば、
Get-ChildItem C:\Temp | Remove-Item
です。
最初が、
Get-ChildItem
なので一見すると「ファイルを確認しているだけ」に見えます。
しかし、その後ろには、
Remove-Item
があります。
この例では、Get-ChildItemで取得した項目がRemove-Itemへ渡されるため、実際には削除処理につながります。
AIが作ったPowerShellを確認するときは、先頭のコマンドだけで判断せず、パイプの後ろまで確認することが重要です。
まとめ
① ChatGPTにPowerShellを作らせる
↓
② コマンドを1行ずつ確認する
↓
③ Get-Help / Microsoft公式情報を確認
↓
④ まず読み取り専用コマンドを実行
↓
⑤ -WhatIfが使える場合は事前確認
↓
⑥ 影響範囲・バックアップを確認
↓
⑦ 必要な場合だけ変更コマンドを実行
↓
⑧ 実行後に結果を確認
そして、
「AIが作ったから実行する」のではなく、「AIに作らせて、人間が確認してから実行する」
という考え方で利用することをおすすめします。
ChatGPTはPowerShellを作成するうえで便利なツールですが、最終的にコマンドを実行するか判断するのは人間です。特にWindows ServerやActive Directoryなどの本番環境では、まず現在の状態を確認し、影響範囲を把握したうえで必要な変更を行うことが重要です。

コメント