Powershell, если файл не существует, отправить письмо

Обновлено: 21.11.2024

При выполнении файловых операций в файле скрипта очень распространенной практикой является проверка того, существует ли файл в указанном месте или нет. Если файл не существует, он может вызвать исключение в сценарии при попытке доступа к файлу, удаления файла, чтения файла или любой операции на основе файла.

В PowerShell существуют различные способы проверки существования файла перед выполнением какой-либо операции с файлом, чтобы избежать исключений.

В этой статье я объясню вам, как проверить существование файла различными способами в PowerShell с примерами.

Есть четыре разных способа проверить, существует ли файл, как показано ниже

  • Использование тестового пути
  • Использование Get-Item
  • Использование Get-ChildItem
  • Использование [System.IO.File]::Exists(файл)

Давайте разберемся с каждым методом проверки существования файла

Использование Test-Path для проверки существования файла

Командлет PowerShell Test-Path проверяет, существует ли файл. Если файл существует, он вернет $True. Если путь или файл отсутствует или не существует, возвращается значение $False.

Синтаксис командлета Test-Path

В приведенном выше синтаксисе

FilePath — расположение файла

Leaf — Проверить наличие файла, а не каталога

Примеры путей тестирования

Давайте рассмотрим пример, чтобы понять, как использовать командлет PowerShell Test-Path для проверки существования файла.

Мы хотим удалить файл Employee.xlsx из местоположения. Запустите приведенный ниже код, чтобы понять командлет Test-Path

В приведенном выше сценарии PowerShell

Переменная $FileName содержит путь к файлу Employee.xlsx

Используя командлет Test-Path, он сначала проверяет, существуют ли файлы в этом месте. Если файл существует, удалите его с помощью команды Remove-Item.

Если файл не существует, выведите на консоль сообщение «Файл не существует»

Полезный совет: как удалить папку, если она существует в PowerShell!

Get-Item PowerShell для проверки существования файла

Командлет PowerShell Get-Item, используемый для получения элемента в указанном месте. Вы можете использовать подстановочный знак (*), чтобы получить все содержимое элемента. Мы увидим, как использовать командлет Get-Item для проверки существования файла.

Синтаксис Get-Item

В приведенном выше синтаксисе Get-Item вы можете использовать разные параметры для получения определенных элементов.

Давайте разберемся, как использовать командлет Get-Item для проверки существования файла в PowerShell.

Пример получения элемента

Давайте рассмотрим пример удаления файла Employee.xlsx, доступного в указанном каталоге. Использование командлета PowerShell Get-Item для проверки существования файла с помощью приведенной ниже команды

В приведенном выше сценарии PowerShell

Переменная $FileName содержит путь к файлу Employee.xlsx

Используя командлет Get-Item, он сначала проверяет, существуют ли файлы в этом месте. Если файл существует, удалите его с помощью команды Remove-Item.

Если файл не существует, выведите на консоль сообщение «Файл не существует».

Полезный совет: как получить дату создания файла в PowerShell!

Get-ChildItem PowerShell для проверки существования файла

Командлет PowerShell Get-ChildItem, используемый для получения элементов или дочерних элементов из одного или нескольких указанных мест. На примере мы увидим, как использовать командлет Get-ChildItem для проверки существования файла.

Вы можете прочитать здесь, чтобы получить имя файла без расширения в PowerShell.

Синтаксис Get-ChildItem

В приведенном выше синтаксисе Get-ChildItem вы можете использовать разные параметры для получения элементов из одного или нескольких конкретных мест, указанных параметром Path.

Давайте разберемся, как использовать командлет Get-ChildItem для проверки существования файла в PowerShell.

Полезный совет: как использовать файл с кодировкой base64 в PowerShell!

Пример Get-ChildItem

Давайте рассмотрим пример удаления файла Employee.xlsx, доступного в указанном месте. Использование командлета PowerShell Get-ChildItem для проверки существования файла с помощью приведенной ниже команды

В приведенном выше сценарии PowerShell

Переменная $FileName содержит путь к файлу Employee.xlsx

С помощью командлета Get-ChildItem сначала проверяется наличие файлов в этом месте. Если файл существует, удалите его с помощью команды Remove-Item.

Если файл не существует, выведите на консоль сообщение «Файл не существует»

-ErrorAction ignore параметр игнорирует исключение, возникающее при проверке существования файла.

Полезный совет: как найти файлы большого размера в PowerShell!

Использование метода [System.IO.File]::Exists()

Давайте разберемся с использованием метода [System.IO.File]::Exists() на примере.

Например, если вы хотите создать новый файл в указанном месте. Прежде чем создавать новый файл, вы сначала проверяете, существует ли файл или нет, чтобы избежать следующей ошибки

Метод [System.IO.File]::Exists() принимает имя файла в качестве входных данных и возвращает значение True или False в зависимости от того, существует файл или нет.

В приведенном выше сценарии PowerShell

$FileName — содержит путь к имени файла

Использование метода [System.IO.File]::Exists() для проверки существования файла. Возвращает true, если файл существует, иначе возвращает false.

В случае, если файл не существует, вы можете создать новый файл с помощью командлета New-Item.

Полезный совет: как составить список файлов в каталоге в PowerShell!

Заключение

В приведенной выше статье я объяснил четыре разных метода проверки существования файла с помощью PowerShell. Это методы Test-Path , Get-Item, Get-ChildItem и [System.IO.File]::Exists().

Хорошей практикой является проверка существования файла перед выполнением любой операции с файлом, чтобы избежать ошибок. Используя проверку существования файла, вы можете обрабатывать ошибки и условия для выполнения операции с файлом.

Вы можете узнать больше об использовании PowerShell mkdir для создания нового каталога или командлета New-Item для создания каталога, если он не существует, и передачи нескольких параметров в функцию для создания каталога.

Дополнительные темы о командах PowerShell Active Directory и основах PowerShell можно найти на домашней странице ShellGeek.

Точно

  • отметить 1206 лучших ответов
  • thumb_up 2682 благодарных голоса

Если вы отправляете код, используйте кнопку "Вставить код". Пожалуйста и спасибо!

То, что вы разместили, это всего лишь одна длинная строка, которую больно читать, пожалуйста, повторно опубликуйте ее в правильном формате.

Кроме того, то, о чем вы просите, кажется довольно простым, вы проверяли это?

Вот сценарий,

Я проверяю, если файл не существует. и он отправлен и по электронной почте.

как я могу повторно использовать отправку почты с вложением?

Здравствуйте,
Теперь я могу отправлять почту, если сжатие выполнено.
Я просто переместил команду в последнюю часть скрипта.

И у меня есть еще один вопрос, как я могу отключить отправку почты, если я не хочу отправлять результаты или файлы журнала?

Есть ли команда для установки значения false для отправки почты? Или нужно добавить в мой скрипт
Спасибо

Войдите или зарегистрируйтесь, чтобы ответить в этой теме.

Не нашли то, что искали? Поищите похожие вопросы на форумах или посетите форум PowerShell.

Щелкни! Обновление Linux, Паролей больше нет?, Атаки BitB, Juno Pictures, Новый лед

Ваша ежедневная доза технических новостей. Вы должны это услышать. Появляется Linux 5.17: Вот что внутри Торвальдс и его команда снова обновили ядро ​​​​Linux, после некоторых трудных времен из-за некоторых изменений в последнюю минуту. Работа начинается на n.

Удобные наушники для работы из дома — чтобы слышать шум, но не передавать его

Поскольку все больше и больше людей работают из дома, требования к функциям гарнитур немного изменились. Теперь многим людям не нужны гарнитуры, которые полностью изолируют их от окружающей среды, потому что рядом с ними может находиться ребенок, которому нужно быть собой.

Эргономичное оборудование

Кто в США должен нести ответственность за предоставление эргономичного оборудования по запросу сотрудника? Это ИТ, поскольку ИТ предоставляет клавиатуры и мыши? Должен ли это быть HR, поскольку он эргономичен и несет потенциальную ответственность, если НЕ предоставляется? Должен ли это быть тот отдел.

Приветствие Xfinity (личный домашний Интернет)

Во-первых, мне больно. Я мог бы произнести речь «Он ставит передо мной задачу», как Хан в «Звездном пути 2: Гнев Хана». Просто замените «Они» на «Он». Но они сделали то, чего я хотел годами (десятилетиями?), так что, думаю, это должно быть признано. Ю.

Щелкни! SATCOM Threat, IE End of Life, Mac с кирпичами, Planet 9, Lego Delorean

Ваша ежедневная доза технических новостей. Вы должны это услышать. ФБР и CISA предупреждают об угрозах для сетей спутниковой связи Согласно новому предупреждению ФБР и CISA спутниковые сети находятся в зоне высокого риска. Согласно ZDNet.

В этом Itechguide Виктор рассказывает, как использовать PowerShell для проверки существования файла. В руководстве представлено несколько примеров использования PowerShell для проверки существования файла.

Чтобы использовать PowerShell для проверки существования файла, используйте командлет Test-Path. Однако вы можете либо ввести путь к файлу непосредственно в команду Test-Path, либо сохранить файл в переменной. Затем используйте переменную в Test-Path.

Просмотреть темы сообщений

Как использовать PowerShell для проверки существования файла без переменной

В этом разделе рассказывается, как запустить команду Test-Path без переменной.

Вы можете запустить Test-Path как отдельную команду. Кроме того, вы также можете комбинировать команду с оператором IF для выполнения дополнительных задач на основе результата команды Test-Path.

Как запустить Test-Path напрямую без переменной

В этом подразделе рассказывается, как запустить Test-Path отдельно (без использования результата в операторе IF).

У меня есть файл с именем process.txt в папке E:\reports.

Чтобы проверить, существует ли файл, введите приведенную ниже команду в PowerShell и нажмите клавишу ввода

Когда я нажал, PowerShell вернул True, что означает, что файл существует.

Однако, если я запускаю ту же команду для несуществующего файла, PowerShell возвращает значение False.

Как объединить тестовый путь и оператор IF без переменной

Как я упоминал ранее, после использования PowerShell Test-Path для проверки существования файла вы можете использовать результат в операторе IF для выполнения задач добавления.

В этом примере я проверю, существует ли «E:\reports\processes.txt», и если он существует, я скопирую файл в «C:\reports». Вот сценарий, который сделает эту работу.

Вот результат в PowerShell ISE и файл, скопированный в C:\reports

Я могу сделать скрипт умнее, добавив две дополнительные строки.

Первая команда выше отображает сообщение, если файл скопирован. Второй выводит сообщение о том, что файл не существует.

Вот модифицированный скрипт…

Как использовать PowerShell для проверки существования файла с переменной

В предыдущем разделе я показал вам, как использовать PowerShell для проверки существования файла без использования переменных. В этом разделе я сохраню результат Test-Path в переменной. Затем используйте переменную в операторе IF.

В примере в этом разделе я хочу проверить, существует ли first-file.txt в пути, показанном на изображении ниже. Затем, если он существует, я скопирую файл в «C:\PS»

На первых шагах я выполню следующую команду:

Эта команда аналогична предыдущей с одним отличием: результат команды сохраняется в переменной fileexists.

Как использовать PowerShell для проверки существования файла и его копирования

Когда я представил этот раздел, я сохранил вывод команды Test-Path в переменную fileexists.

В этом подразделе я научу вас копировать файл, если он существует. Для этого я представлю оператор IF с командой Copy-Item.

Вот полный скрипт с комбинированными командами:

А вот и скрипт в PowerShell ISE.

Как использовать PowerShell для проверки существования файла и его удаления

В последнем подразделе вы узнали, как проверить, существует ли файл, и скопировать его. Что, если вместо этого вы хотите скопировать файл?

Если вы хотите удалить файл, а не копировать его, замените команду Copy-Item на команду Remove-Item.

Вот обновленный скрипт, который использует оператор PowerShell «IF» для проверки существования файла. Затем, если он существует, удалите его…

Как использовать PowerShell для проверки существования файла, иначе выйдите

В некоторых сценариях PowerShell может потребоваться проверить, существует ли файл.Затем, если он существует, выполните указанную задачу, например скопируйте или удалите файл, в противном случае закройте скрипт.

Для этого все, что вам нужно сделать, это добавить блок Else оператора If.

В последнем подразделе я использовал этот скрипт для удаления файла, если он существует.

Если я хочу, чтобы скрипт завершал работу, если файл не существует, я изменю скрипт, как показано ниже…

Вот логика модифицированного скрипта…

Проверьте, существует ли файл E:\reports\first-file.txt. Если он существует, удалите файл.

Однако, если файл не существует, запустите команду в блоке Else оператора If. В данном случае команда в цикле Else — это слово Break.

«Break» сообщает PowerShell о прекращении обработки скрипта. Вы также можете добавить Break в блок «Если» оператора — под командой Remove-Item…

Как использовать PowerShell, чтобы проверить, существует ли файл и не является ли он пустым

Это еще одно условие, распространенное в сценариях PowerShell, — проверка того, существует ли файл и не является ли он пустым. Это может быть применимо к файлам журналов.

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

Чтобы проверить, существует ли файл, используйте команду Test-Path. Однако, чтобы проверить, пуст ли файл, нужно ввести еще одну команду Get-ChildItem.

В этом сценарии вы можете использовать команду Get-ChildItem двумя способами.

1, если вы хотите проверить, пуст ли один файл, вы можете запустить команду Get-ChildItem, используя полный путь к файлу в качестве параметра Путь. 2. В качестве альтернативы, если вы хотите проверить группу файлов в папке, используйте путь к папке в качестве параметра Путь.

В этом разделе я приведу пример, который проверяет, существует ли конкретный файл и является ли он пустым. Я расскажу о втором варианте в разделе Как использовать PowerShell для проверки существования файла в папке далее в этом руководстве.

В этом примере я хочу проверить, является ли файл first-file.txt пустым.

Как я упоминал ранее, первым шагом является запуск команды Get-ChildItem с использованием полного пути к файлу в качестве параметра Путь. Для начала выполните команду ниже…

Вот результат выполнения команды. Из результата команды видно, что у файла есть свойство с именем Длина.

Фактически свойство Длина файла показывает размер файла. Более того, если файл пуст, Длина будет равна нулю (0).

Итак, чтобы использовать PowerShell для проверки того, не является ли оно пустым, мы проверим, что Длина НЕ равна нулю (0).

Для этого я изменю последнюю команду, как показано ниже…

Вот результат выполнения команды в PowerShell. В этом случае, поскольку размер моего файла равен 0 (пустой), команда вернула false.

Это означает, что этот файл пуст.

Но как включить бит, который проверяет, существует ли файл? Рад, что вы спросили!

Чтобы представить логику, которая использует PowerShell для проверки существования файла, а также проверки того, что файл НЕ пуст, я объединим части нашего предыдущего скрипта и приведенную выше команду Get-ChildItem.

Вот мой модифицированный скрипт…

В этой модифицированной версии скрипта я внес следующие изменения…

  1. В строке 2 я сохранил команду Get-ChildItem, которая проверяет, является ли файл пустым, в переменной с именем $checkiffileisempty.

Это условие проверяет, является ли то, что сохранено в $fileexists, True (файл существует). Кроме того, он проверяет, является ли то, что сохранено в $checkiffileisempt, False (файл пуст).

Команда добавляет текст в параметр Value команды Set-Content.

Чтобы проверить, работает ли скрипт, скопируйте его в PowerShell ISE и запустите скрипт…

После запуска скрипта файл first-file.txt, который раньше был пустым, теперь содержит некоторые значения. Кроме того, размер файла больше не равен нулю (0)!

Как использовать PowerShell для проверки существования файла в папке

До сих пор в этом руководстве рассматривалось несколько сценариев использования PowerShell для проверки существования файла.

В этом разделе я хочу углубиться в папки. В частности, вы узнаете, как проверить, существует ли файл в текущей папке или во всех вложенных папках.

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

Как использовать PowerShell для проверки существования файла в текущей папке

В этом первом примере вы узнаете, как проверить, существует ли файл в текущей папке, исключая все вложенные папки.

В этом примере я хочу проверить, существуют ли файлы с расширением «.log» в папке «E:\reports». Однако я хочу исключить все вложенные папки.

Первый шаг — запустить команду Get-ChildItem. Затем направьте вывод в Where-Object и отфильтруйте по свойству PSIsContainer.

Свойство PSIsContainer — это свойство, определяющее папки или каталоги. В команде Where-Object я указал «$_.PSIsContainer -ne $true». Эта команда просто говорит: «Не возвращать какой-либо элемент, если его свойство PSIsContainer равно True. Это вернет только файлы.

Вот команда…

А вот и результат в PowerShell…

Последний шаг – возврат полного пути ко всем файлам с расширением «.log» в текущей папке.

Вот команда…

С этого момента, если вы хотите выполнить дальнейшие действия с файлами, вы можете направить вывод последнего результата в цикл ForEach. Затем в цикле ForEach можно запускать дополнительные команды.

Как использовать PowerShell для проверки существования файла во вложенных папках

Если вы хотите проверить, существует ли определенный файл или файлы во всех вложенных папках, а не в текущей папке, вам нужно внести небольшие изменения в команду Get-ChildItem.

В частности, когда вы передаете команду Get-ChildItem в Where-Object, вы фильтруете Where-Object, чтобы возвращать только папки.

Команда возвращает полный путь ко всем подпапкам в указанной папке…

На следующем шаге вам нужно использовать оператор ForEach для перебора всех папок, возвращенных последней командой. Затем в операторе ForEach запустите еще одну команду Get-ChildItem для каждой вложенной папки.

Существует три варианта ForEach, но в этом примере я буду использовать командлет ForEach-Object.

Команда отображает все файлы журналов в подпапках…

Как использовать PowerShell для проверки существования файла в текущей папке и во всех вложенных папках

В последних двух подразделах я использовал свойство PSIsContainer либо для фильтрации вложенных папок, либо для возврата только вложенных папок. В этом примере я уберу свойство PSIsContainer.

Однако я представлю параметр команды Get-ChildItem, который называется Recurse. Параметр Recurse заставляет Get-ChildItem проверять указанную папку и все ее вложенные папки.

Вот модифицированный скрипт.

Параметр Recurse вводится в первой команде Get-ChildItem. Во второй команде Get-ChildItem (в блоке ForEach-Object) это не требуется.

Вот результат выполнения команды. На этот раз отчет включает все файлы журналов в верхней папке и во всех ее подпапках.

Как использовать PowerShell для проверки существования файла на удаленном компьютере

Если вы хотите проверить, существует ли файл на удаленном компьютере, вы можете применить тот же принцип, который обсуждался во всех примерах в этом руководстве.

Однако вам необходимо ввести новую команду под названием Invoke-Command. Затем в команде Invoke-Command используйте ее параметр ScriptBlock, чтобы указать одну из команд, которые мы обсуждали ранее в этом руководстве.

Еще один важный момент: вам может потребоваться указать имя пользователя и пароль для учетной записи с разрешением на подключение к удаленному компьютеру.

Кроме того, указанная учетная запись должна иметь разрешение на выполнение команды в параметре ScriptBlock — на удаленном компьютере.

Наконец, используйте параметр ComputerName, чтобы указать имя удаленного компьютера.

Для справки, вот общий синтаксис команды Invoke-Command.

Чтобы узнать больше о команде Invoke-Command, см. раздел «Ссылки и дополнительная литература» в конце этого руководства.

Если я надеюсь, что смог успешно научить вас, как использовать PowerShell для проверки существования файла!

Я также надеюсь, что вам был полезен Itechguide. Если вы нашли его полезным, пожалуйста, проголосуйте «Да» на вопрос «Был ли этот пост полезным» ниже.

Кроме того, вы можете задать вопрос, оставить комментарий или оставить отзыв с помощью формы «Оставить ответ» в конце этой страницы.

Наконец, чтобы получить дополнительные технические руководства по электронной почте, посетите нашу страницу с инструкциями по Windows PowerShell. Вам также может быть очень полезна наша страница Работа с домашней страницы.

PowerShell проверяет, существует ли файл — Svendsen Tech

Я также покажу, как создать новый файл, если он в данный момент не существует, и покажу, как обрабатывать ошибки для корректного создания файла.

Официальная онлайн-документация Microsoft для Test-Path находится по этой ссылке.

Как проверить, существует ли файл с помощью PowerShell

Вы можете использовать что-то вроде этого для проверки в командной строке:

Имейте в виду, что вам нужны кавычки, если путь содержит пробелы, круглые скобки и, возможно, другие символы, которые я сейчас не могу придумать. PowerShell автоматически добавляет кавычки по завершении вкладок. Я рекомендую использовать одинарные кавычки, потому что двойные кавычки "расширяют" переменные.

Это в основном актуально, если в пути есть "$", что частично исправлено логикой, которая заставляет, например, "C:\$ProgDir\temp" работать без необходимости экранировать знак доллара/символ "`", обратная галочка, управляющий символ PowerShell.

В противном случае вы увидите что-то вроде этого:

Чтобы явно убедиться, что это файл, а не каталог, используйте параметр -PathType со следующими возможными значениями:

  • Любой
  • Листок (файл)
  • Контейнер (каталог/папка)

Пример скриншота

Использование сценария

В сценарии вы обычно используете его в операторе if. Чтобы отменить и проверить, не существует ли папка или файл, используйте либо «!» или "-not" и не забудьте заключить оператор Test-Path в круглые скобки.

Также помните, что если путь или имя файла содержит пробел, вам необходимо заключить весь путь в кавычки. Одинарные или двойные кавычки будут работать одинаково, если в пути или имени файла нет «расширяемых» частей, но несколько более безопасным выбором являются одинарные кавычки. Это то, что PowerShell использует по умолчанию, когда вы автоматически дополняете имена с помощью табуляции в приглашении.

Вы также должны знать о разнице между -Path и -LiteralPath. Последний будет принимать путь буквально, как следует из названия, в то время как первый поддерживает синтаксис подстановочных знаков. Это часто обнаруживается случайно, когда кто-то сталкивается с файлом с неровными скобками, потому что он является частью того же синтаксиса, что и в [a-f0-9] для одной шестнадцатеричной цифры. Это вызовет сообщения об ошибках, по крайней мере, в более ранних версиях PowerShell, при использовании -Path. При перечислении структур каталогов из одного корневого каталога используйте -LiteralPath. И если вам не нужна поддержка подстановочных знаков, это более безопасный выбор.

Создание файла, если он не существует

Например, вы можете использовать командлет Set-Content для создания нового файла, если он еще не существует.

Посмотрите мои примеры и Get-Help Set-Content (у него есть параметр-переключатель -Online) или Microsoft Docs в Интернете по этой ссылке.

Вы также можете использовать Out-File и другие методы, которые я не буду здесь подробно описывать.

Конечно, здесь можно использовать переменную $Variable с именем файла вместо жестко запрограммированного текста.

Это просто создает файл с пустой строкой в ​​качестве содержимого.

Или вы можете сделать это так, если работаете в командной строке или если вам так больше нравится:

Я подумал, что лучше сначала продемонстрировать, что считается наиболее правильным способом использования скрипта.

Если вы хотите проверить наличие ошибок при создании файла, вы можете использовать оператор try <> catch <> вместе с параметром и значением "-ErrorAction Stop" для командлета, создающего файл, например Set-Content или Out-File.

Вот простой пример:

Видеть часто значит верить (иногда ошибочно, но это другая история), поэтому вот дамп экрана PowerShell ISE, в котором выполняется этот пример, сохраненный в файле сценария .ps1.

Перечисление возможных значений PathType

Небольшой «трюк» для просмотра возможных значений перечисления для -PathType заключается в использовании несуществующего значения, например:

И мы замечаем часть, где говорится:

Использование метода класса .NET System.IO.File «Существует»

В PowerShell пространство имен "System" является необязательным, поэтому вы также можете просто использовать "Io.File".

Одна вещь, о которой следует помнить, это то, что для этого метода вам нужен полный путь. Чтобы проверить, находится ли файл в текущем каталоге с помощью метода IO.File Exists(), вы можете использовать что-то вроде этого, где вы обычно используете переменную с именем файла вместо жестко закодированного здесь «test.ps1». ":

Пользовательский поиск Google только на этом веб-сайте

Читайте также: