ユーザ用ツール

サイト用ツール


dialy:powershellnewtempfile65536

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

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個までできるということです。

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
dialy/powershellnewtempfile65536.txt · 最終更新: 2020/07/11 23:39 by michinobu