Чтение из случайно названных текстовых файлов

Я заканчиваю сценарий в PowerShell, и это то, что я должен сделать:

  • Найти и получить все TXT-файлы в папке
  • Прочитайте их содержание (внутри должно быть меньше 50)
  • Если какой-либо из этих файлов имеет номер больше 50, измените флаг, который позволит мне отправить критическое сообщение на сервер мониторинга.

Часть кода ниже - это то, что у меня уже есть, но, вероятно, это неправильно, потому что я не дал никаких аргументов Get-ContentВозможно, это что-то очень простое, но я все еще привыкаю к ​​PowerShell. Какие-либо предложения? Большое спасибо.

Get-ChildItem -Path C:\temp_erase\PID -Directory -Filter *.txt |            
ForEach-Object{
    $warning_counter = Get-Content
    if ($warning_counter -gt '50')
    {
        $crit_counter = 1
        Write-Host "CRITICAL: Failed to kill service more than 50 times!"
    }
}

1 ответ

Решение

но это, вероятно, неправильно, потому что я не дал никаких аргументов для Get-Content

Да. Это первая проблема. Посмотри на Get-Help <command> и / или документы, такие как TechNet, когда вы потерялись. Для основных командлетов вы всегда будете видеть примеры.

Во-вторых, Get-Content, возвращает строковые массивы (по умолчанию), поэтому, если вы проводите числовое сравнение, вам нужно рассматривать значение как таковое.

В-третьих, у вас есть разрыв строки между foreach-object командлет и его открывающая скобка. Это создаст вам проблему разбора, и PS предложит пропустить блок процесса. Так меняются только упомянутые....

Get-ChildItem -Path C:\temp_erase\PID -Directory -Filter *.txt | ForEach-Object{
    [int]$warning_counter = Get-Content $_.FullName
    if ($warning_counter -gt '50')
    {
        $crit_counter = 1
        Write-Host "CRITICAL: Failed to kill service more than 50 times!"
    }
}

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

Другие вопросы по тегам