dragon image みちのぶのねぐら

PowerShell の一時ファイルを消さないと 65,536日目に死ぬ

Update: 2020-07-11

65,536日って179年? 長生きかも。

PowerShell には New-TemporaryFile というコマンドがあって、これが便利なのですが、作成した一時ファイルを消し忘れるとたいへんなことになります。試してみましょう。

 Remove-Item (Join-Path $env:TEMP .tmp) $Count = 0 try { while ($true) { ++$Count if (($Count % 10000) -eq 0) { "." | Write-Host } elseif (($Count % 100) -eq 0) { "." | Write-Host -NoNewline } New-TemporaryFile -ErrorAction Stop | Out-Null } } catch { $Count [Math]::Log($Count, 2) $TempFileList = Get-Item (Join-Path $env:TEMP .tmp) $TempFileList[0].Name $TempFileList[-1].Name } finally { Remove-Item (Join-Path $env:TEMP *.tmp) }

PowerShell で while ってあまり使った記憶が無いな。

この処理にはそこそこ時間がかかって、動いているのかどうか心配になるので "." で進捗を表示します。

PS > .\Test-TempFile.ps1
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
.......................................................65536
16
tmp1.tmp
tmpFFFF.tmp

New-TemporaryFile は環境変数 TEMP の場所に tmp1.tmp から tmpFFFF.tmp までのファイルをランダムに(たぶん)生成します。 16進数で 4桁だから 2の 16乗、つまり 65,536個までできるということです。

Tag: powershell