不特定多数が使うパソコンには色々な人のプロファイルがたまっていく。手動で削除するのは面倒なので、スクリプト化した。
手動で削除する場合
スクリプトで消す前に手動で削除する場合の正式な手順の確認。プロファイルの実態は C:\Users\配下にあるのだが、これをエクスプローラからDeleteキーなどで手動で消してしまうと他のユーザでログインできなくなるなど挙動がおかしくなるので、下記のようにシステムのプロパティから削除する必要がある。
Windowsキー + r キーで「ファイル名を指定して実行」を呼び出し sysdm.cpl と入力してシステムのプロパティを開く

「詳細設定」タブのユーザプロファイル欄の「設定」ボタンをクリックする。

対象のプロファイルを選択して、「削除」をクリックする。とここまでが正しい手順となる。

PowerShell スクリプトで一括で消す場合
大量のプロファイルがたまっている場合は1つずつ消すと時間もかかり、かなり手間なのでPowershellで一括削除してしまう。下記のファイルをテキストエディタに作成して、拡張子を .ps1 で保存して実行する。実行するとログインしているユーザとビルトインユーザ以外全て削除される。
# 作業フォルダの定義
$scriptname = $MyInvocation.MyCommand.Name
$path = $PSScriptRoot
# 作業フォルダに移動
cd $path
#ログ取得
if (!(Test-Path .\log)){
mkdir .\log
Write-Output ("logフォルダを作成しました。")
}
$logfile = ".\log\" + $scriptname +"_"+ (Get-date -Format "yyyy-MMdd-HHmmss") + ".log"
Start-Transcript $logfile -Append
# ローカル端末のプロファイル一覧を取得
$profiles = Get-WmiObject -class win32_userprofile | ? {$_.LocalPath -Like "C:\Users\*"}
$count = 0
foreach($p in $profiles){
$count ++
# プロファイル削除処理
$p | Remove-WmiObject
Write-Output("[" + $count +"]/[" + $profiles.Count + "] " + $p.LocalPath + " を削除しました。")
}
# ログ停止
Stop-Transcript
コメント