Временные файлы и Out-Notepad

Часто в скриптах приходится использовать временные файлы, которые нужны только в процессе работы, а затем их было бы хорошо удалить. Делать это разумеется можно по разному. Можно создавать в папке со скриптом файл script.tmp, и удалять его когда он становится ненужным, но в таком случае необходимы разрешения на запись в папку со скриптом. Можно получить путь ко временному каталогу пользователя, но что если другой скрипт (или этот же запущенный второй раз) или программа уже создали файл с таким же именем? Проверять имя на уникальность? Вряд ли кто это делает.

К счастью в PowerShell можно использовать .Net, а значит нам доступны все техники используемые программистами, например функция GetTempFileName:

[PS <1> C:\Root] [io.path]::GetTempFileName()
C:\Users\Gusev\AppData\Local\Temp\tmp5BC9.tmp

Эта команда создает пустой файл с уникальным именем во временной папке пользователя, и возвращает путь к нему. Аналогичная функция GetTempPath позволяет просто получить имя временной папки:

[PS <2> C:\Root] [io.path]::GetTempPath()
C:\Users\Gusev\AppData\Local\Temp\

Ну и практический пример, функция для отображения данных полученных из конвейера в блокноте:

function Out-Notepad
{
    #Создаем временный файл и помещаем путь к нему в переменную
    $File = [System.IO.Path]::GetTempFileName()
    #Перенаправляем данные из конвейера во временный файл
    $Input | Out-File $File
    #Открываем файл блокнотом 
    Notepad.exe $File
    #Даем блокноту время на открытие файла...
    Sleep 1
    #И удаляем его, чтобы не засорять систему.
    Remove-Item $File
}

Для использования перенаправить данные по конвейеру😉

Out-Notepad

Опубликовано в Learn, PowerShell, Scripting, Tips. 1 Comment »

Один ответ to “Временные файлы и Out-Notepad”

  1. Sane Says:

    Отличная функция, спасибо


Обсуждение закрыто.

%d такие блоггеры, как: