Win11共有PCモードの自動プロファイル削除をさらに強固にする

# 自動プロファイル削除とは
::: note
- Intuneの共有PCモードは一定時間後にユーザプロファイルを削除してくれます。
- おもに貸出PC・研修向けPC・店舗向けPCなど、一時的かつ特定用途なPCのニーズに重宝します。
- くわしくは[以前のエントリ](https://qiita.com/minoden_works/items/234cb9840c1119b8b0b0)をどうぞ。
:::

# 問題点
::: note warn
- ですが、サインオフして即座に消えるわけではありません。
- 間違ってサインオフしてしまっても、入りなおすとまだ消えていません。
- ちょっと猶予期間がある設計のようです。
:::

- （2/17追記）だいたい5～10分くらいの猶予だとわかりました。再起動を数回繰り返すと確実に消えます。
- 構成ポリシーで「サインオフ」を表示させないようにすればさらにセキュアな端末になりそうです。

# 動作イメージ
- 壁紙の色をかえてテキストファイルを保存しておきます。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/36fa9034-c336-bb97-4085-2f393d8745aa.png)

- 何回か再起動します。
![タイトルなし.png2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/4717170e-c893-0f7c-37aa-bac2a6bafec3.png)


- ログイン後、「Windowsを準備しています」と出たら消えている証拠。
- ユーザプロファイルを再作成してくれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/e81474f8-cee5-7ba5-bdbd-173380ed6bb7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/ae124174-e21b-4828-bee8-5050cfa1a56a.png)
- このプロセスはPCによっては数分待たされる可能性も。だから猶予が作られているのかも。



# レジストリを設定する
```.ps1
# 管理者権限チェック
if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    Write-Host "管理者権限が必要です" -ForegroundColor Red
    Exit
}

$regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"
$regName = "CleanupProfiles"

function Get-RegistryStatus {
    try {
        if (-NOT (Test-Path $regPath)) {
            return "キー未存在"
        }
        
        $value = Get-ItemProperty -Path $regPath -Name $regName -ErrorAction SilentlyContinue
        if ($null -eq $value) {
            return "値未設定"
        }
        
        return $value.$regName
    }
    catch {
        return "エラー発生"
    }
}

function Set-ProfileDeletion {
    do {
        $days = Read-Host "自動削除までの日数を入力（1-365）"
    } while (-not ($days -match "^\d+$" -and [int]$days -ge 1 -and [int]$days -le 365))

    New-Item -Path $regPath -Force | Out-Null
    Set-ItemProperty -Path $regPath -Name $regName -Value $days -Type DWord -Force
    Write-Host "$days 日後に設定しました" -ForegroundColor Green
}

switch (Get-RegistryStatus) {
    { $_ -is [int] } {
        Write-Host "現在の設定: $_ 日後に削除" -ForegroundColor Cyan
        $choice = Read-Host "設定を無効化しますか？ (Y/N)"
        if ($choice -eq "Y") {
            Remove-ItemProperty -Path $regPath -Name $regName -Force
            Write-Host "無効化しました" -ForegroundColor Yellow
        }
        break
    }
    "値未設定" {
        Write-Host "現在自動削除設定は無効です" -ForegroundColor Magenta
        $choice = Read-Host "新規設定しますか？ (Y/N)"
        if ($choice -eq "Y") { Set-ProfileDeletion }
        break
    }
    "キー未存在" {
        Write-Host "レジストリキーが存在しません" -ForegroundColor Red
        $choice = Read-Host "新規作成しますか？ (Y/N)"
        if ($choice -eq "Y") { Set-ProfileDeletion }
        break
    }
    default {
        Write-Host "予期せぬエラーが発生しました" -ForegroundColor Red
    }
}

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/d589ab2d-4c39-4818-4dcc-28c652bfc518.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/b1ff3169-10b3-39ff-3bd2-e6359146a688.png)


- これで再起動時に1日間アクセスのないユーザープロファイルが強制的に消えます。
- ただしこれで消えるのはC:\Users以下だけなので、それ以外のフォルダに保存できないように別途対応しましょう。
- 標準ユーザー運用であれば大丈夫だと思います。
- さらに完全にするならUWF（統合書き込みフィルタ）というのもありますが、運用工数が増えるデメリットのほうが多いと思います。
- 仮想マシンのスナップショットと組み合わせる共有PCモードというのが[多分一番早いと思います。](https://moto-neta.com/net/tabunkoregaichiban/)

# ポエム
- そういえば昔ネットカフェなんかはこんなPCが多かった気がします。
- 特別な書き戻しソフトなんかもいらず、Intuneの構成プロファイルでできるのは良い時代ですね。

# リンク集
https://it.tachiiri.com/2023/05/blog-post_41.html
https://admx.help/?Category=Windows_8.1_2012R2&Policy=Microsoft.Policies.UserProfiles%3A%3ACleanupProfiles&Language=ja-jp