PowerShellのChange.logからスクリプトを予想してもらう！

私は学校勤務なのですが、先日自分の個人フォルダに、あるChange.logが残されていました。
正直中身にはあんまり興味がなかったのですが、最近はAIで色んな事を試しているので少しログの解析を行ってみました。（暇じゃないよ！）
ログ自体は長いので最初の部分だけ掲載します。（組織が特定されないよう置換修正済み）

# PowerShell トランスクリプト

```powershell
**********************
Windows PowerShell トランスクリプト開始
開始時刻: 20240625171141
ユーザー名: DOMAIN\SYSTEM
RunAs ユーザー: DOMAIN\SYSTEM
構成名: 
コンピューター: 10264WS2141349 (Microsoft Windows NT 10.0.19045.0)
ホスト アプリケーション:  -ExecutionPolicy ByPass -File ChangeFolderRole.ps1
プロセス ID: 3524
PSVersion: 5.1.19041.4412
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.19041.4412
BuildVersion: 10.0.19041.4412
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
トランスクリプトが開始されました。出力ファイル: D:\ChangeFolderRole.ps120240625171141.log
★変更前★ D:\Folder1

FileSystemRights  : 268435456
AccessControlType : Allow
IdentityReference : NT AUTHORITY\SYSTEM
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : InheritOnly

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : NT AUTHORITY\SYSTEM
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None

FileSystemRights  : 268435456
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : InheritOnly

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : 100000DM001\User1
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

cmd : '\\DOMAIN.local\SysVol\DOMAIN.local\Policies\{A5AA7A6F-1386-47DA-8E6D-9BC554E60943}\Machine\Scripts\Start
up'
発生場所 \\DOMAIN.local\SysVol\DOMAIN.local\Policies\{A5AA7A6F-1386-47DA-8E6D-9BC554E60943}\Machine\Scripts\Sta
rtup\ChangeFolderRole.ps1:48 文字:9
+         cmd /c icacls $targetFolder /inheritance:d 2>&1;
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: ('\\DOMAIN.l...cripts\Startup':String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

上記の現在のディレクトリで CMD.EXE を開始しました。
UNC パスはサポートされません。Windows ディレクトリを既定で使用します。
処 理 フ ァ イ ル : D:\Folder1
1 個 の フ ァ イ ル が 正 常 に 処 理 さ れ ま し た 。 0 個 の フ ァ イ ル を 処 理 で き ま せ ん で し た 
cmd : '\\DOMAIN.local\SysVol\DOMAIN.local\Policies\{A5AA7A6F-1386-47DA-8E6D-9BC554E60943}\Machine\Scripts\Start
up'
発 生 場 所  \\DOMAIN.local\SysVol\DOMAIN.local\Policies\{A5AA7A6F-1386-47DA-8E6D-9BC554E60943}\Machine\Scripts\Sta
rtup\ChangeFolderRole.ps1:48 文 字 :9
+         cmd /c icacls $targetFolder /inheritance:d 2>&1;
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: ('\\DOMAIN.l...cripts\Startup':String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
```

まぁ、サラッと見れば何をしているのかはわかるかもしれませんがディレクトリに対してアクセス権限の変更をしようとしています。

一応ChatGPTにも聞いてみました。
```GPTプロンプト.txt
「このログを見て何をしているのか当ててください。」
```


```GPTの回答.txt
このログからは、Windows PowerShellスクリプトが実行され、特定のフォルダに対してアクセス権限の設定を変更しようとしていることがわかります。以下にログの内容から読み取れるポイントをまとめます。

	1.	トランスクリプトの開始情報:
	•	PowerShellセッションが開始され、ChangeFolderRole.ps1というスクリプトが実行されています。
	2.	変更前のアクセス権の状態:
	•	D:\Folder1のフォルダに対して、複数のアクセス権が設定されています。
	•	NT AUTHORITY\SYSTEMとBUILTIN\Administratorsがフルコントロールと268435456の権限を持っています。
	•	100000DM001\User1もフルコントロールの権限を持っています。
	3.	アクセス権の変更コマンド:
	•	icaclsコマンドを使用して、$targetFolderのアクセス権を変更しようとしています。
	•	具体的には、/inheritance:dオプションを使って、継承を無効にしようとしています。
	4.	エラーメッセージ:
	•	UNCパス（ネットワークパス）はサポートされていないため、ローカルディレクトリがデフォルトとして使用されていることが示されています。
	•	icaclsコマンドの実行時にエラーが発生しており、詳細なエラーメッセージがログに記録されています。
	5.	処理結果:
	•	D:\Folder1に対してアクセス権の変更が試みられたが、一部のファイルについて処理が成功し、一部については失敗したことが記録されています。

結論

このスクリプトは、指定されたフォルダ（D:\Folder1）のアクセス権限を変更することを目的として実行されています。具体的には、継承されたアクセス権を無効にしようとしていますが、ネットワークパスのサポートに問題があり、エラーが発生しています。これにより、全てのファイルに対してアクセス権の変更が適用されなかったことが示されています。

もし具体的な操作や解決方法が必要であれば、次のステップとしてエラーメッセージの詳細を確認し、icaclsコマンドの実行環境や引数を見直す必要があります。
```
詳細に解説してくれるの本当にありがたいですね。

これだけでもすべてのITエンジニアは使うべきって感じると思います。

では次にスクリプトの予想をしてもらいましょう。
```GPTプロンプト.txt
このログからどのようなスクリプトが実行されたか予想して生成してください。
```
```GPT回答.txt
# PowerShellスクリプト: ChangeFolderRole.ps1

# 変更するフォルダのパスを指定
$targetFolder = "D:\Folder1"

# トランスクリプトの開始
Start-Transcript -Path "D:\ChangeFolderRole.ps1$(Get-Date -Format 'yyyyMMddHHmmss').log"

# 現在のアクセス権を表示
Write-Host "★変更前★ $targetFolder"
Get-Acl $targetFolder | Format-List

try {
    # icaclsコマンドを使って継承を無効にする
    cmd /c icacls $targetFolder /inheritance:d 2>&1
    
    # アクセス権の変更を確認
    Write-Host "★変更後★ $targetFolder"
    Get-Acl $targetFolder | Format-List
} catch {
    # エラーが発生した場合の処理
    Write-Error "エラーが発生しました: $_"
}

# トランスクリプトの終了
Stop-Transcript
```
```
このスクリプトでは、以下の手順を実行しています。

	1.	Start-Transcriptコマンドを使ってトランスクリプトの記録を開始します。
	2.	変更前のアクセス権を表示するために、Get-Aclコマンドを使用して指定したフォルダのアクセス権を取得し、Format-Listで表示します。
	3.	try-catchブロックを使用して、icaclsコマンドを実行し、指定したフォルダの継承を無効にしようとします。エラーが発生した場合は、catchブロックでエラーメッセージを表示します。
	4.	Stop-Transcriptコマンドを使ってトランスクリプトの記録を終了します。

このスクリプトは、指定されたフォルダのアクセス権の継承を無効にし、変更前後のアクセス権を確認するための基本的な処理を含んでいます。エラーメッセージの詳細もログに記録されるようにしています。
```
天才だな！
エンジニア本当に要らなくなるよね。
もちろんこのスクリプトを鵜呑みに実行なんて考えられないし、スクリプトが理解出来ていないといけない訳で、そう考えると優秀なエンジニア程、部下が不要になる。
中途半端なエンジニアは不要になると言った方が良いのか。
とにかく恐ろしい時代が来たなぁと感じます。

いずれにせよ今まで面倒だった事が片手間で出来てしまう時代です。
上手く使いこなせないと生きていけない世の中になる事は間違いないなと。
エンジニアもそれ以外も。

AIもっと使っていきましょう！