新年早々にYouTubeで偶然オススメされてきた居合い抜刀術を眺めながら、鞘に収まる刀が瞬間にして竹を切る見事な動作に魅了された。道具である刀を威嚇するでもなく、"必要" 即 "実行"とミリ秒単位の時間で抜き差しする様は仕事術の極みではなかろうかと。そんなわけで清々しい新年を迎えるためにPCのデスクトップファイルをAI&PowerShellで大掃除した筆者であったが、迅速に常時デスクトップをクリーンに保つための工夫を加えることにした。前回生成したデスクトップファイル圧縮スクリプトとデスクトップファイル削除スクリプトをひとつにまとめると以下のようになる。

$source = [Environment]::GetFolderPath('Desktop');
$destination = "D:\$((Get-Date).ToString('yyyyMMdd'))_BackUp.zip"; Add-Type -A 'System.IO.Compression.FileSystem';
[IO.Compression.ZipFile]::CreateFromDirectory($source, $destination);
Get-ChildItem "$env:USERPROFILE\Desktop" -File | Where-Object { $_.Extension -ne '.lnk' } | Remove-Item -Force;
Get-ChildItem "$env:USERPROFILE\Desktop" -Directory | Where-Object { $_.Name -ne 'ショートカット名' } | Remove-Item -Recurse -Forc

これをPowerShellファイル形式でDesktop.PS1として保存する。ダブルクリックするとまとめて圧縮バックアップ、削除と実行されるので便利だが実行するとPS1ファイルも削除される。お掃除ファイルであるDesktop.ps1はデスクトップに残したいので除外演算子-notinで.ps1拡張子を除外すると以下のように。

$source = [Environment]::GetFolderPath('Desktop');
$destination = "D:\$((Get-Date).ToString('yyyyMMdd'))_BackUp.zip"; Add-Type -A 'System.IO.Compression.FileSystem';
[IO.Compression.ZipFile]::CreateFromDirectory($source, $destination);
Get-ChildItem "$env:USERPROFILE\Desktop" -File | Where-Object { $_.Extension -notin '.lnk', '.ps1' } | Remove-Item -Force;
Get-ChildItem "$env:USERPROFILE\Desktop" -Directory | Where-Object { $_.Name -ne 'ショートカット名' } | Remove-Item -Recurse -Force;

ダブルクリックするとあたかも、デスクトップのファイルやフォルダが瞬時に圧縮され、Dドライブに保管されると同時に削除される。居合術のような素早さでデスクトップはスッキリ、新年にふさわしく気持ちのよいものである。しかし、Dドライブに保存するバックアップファイルの容量の積み重ねが気になるところだ。サイバーパンク感漂うレトロモード(Windowsターミナルの設定の既定値→外観→レトロ ターミナルの効果)を加えAIShellを実装したPowerShellを起動し、"Start-AIShell"でopenai-gptエージェントを立ち上げる。

  • 新年の衣替えにレトロモードで"Start-AIShell"

”任意のフォルダの容量が一定制限以上になったらアラートを発するPowerShellコマンド”

で提示されたサンプルが以下になる。

$folderPath = "C:\Your\Folder\Path"
$sizeLimit = 1GB
$folderSize = (Get-ChildItem $folderPath -Recurse | Measure-Object -Property Length -Sum).Sum

if ($folderSize -gt $sizeLimit) {
    Write-Host "アラート: フォルダの容量 が制限を超えました。"
}

これをさきのDesktop.ps1とマージさせてみる。バックアップの保存先がDドライブ直下では大きすぎるのでD:\backupを作りここに保存することにし、アラートが消えないようにRead-Hostを使ってユーザーの入力を待ってから終了する仕組みにしたDesktop.ps1が以下。アラート上限の1GBを意図的に実験するために4MBにしている。

$source = [Environment]::GetFolderPath('Desktop');
$destination = "D:\backup\$((Get-Date).ToString('yyyyMMdd'))_BackUp.zip"; Add-Type -A 'System.IO.Compression.FileSystem';
[IO.Compression.ZipFile]::CreateFromDirectory($source, $destination);
Get-ChildItem "$env:USERPROFILE\Desktop" -File | Where-Object { $_.Extension -notin '.lnk', '.ps1' } | Remove-Item -Force;
Get-ChildItem "$env:USERPROFILE\Desktop" -Directory | Where-Object { $_.Name -ne 'ショートカット名' } | Remove-Item -Recurse -Force;

$folderPath = "D:\backup"
    $sizeLimit = 4MB
    $folderSize = (Get-ChildItem $folderPath -Recurse | Measure-Object -Property Length -Sum).Sum

    if ($folderSize -gt $sizeLimit) {
        Write-Host "アラート: フォルダの容量 が制限を超えました。"
    };
Read-Host "Enterを押して終了";

この記事は
Members+会員の方のみ御覧いただけます

ログイン/無料会員登録

会員サービスの詳細はこちら