Чтение из случайно названных текстовых файлов
Я заканчиваю сценарий в 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!"
}
}
Здесь не хватает одной очевидной вещи: вы не показываете, какой файл вызвал сообщение. Вам следует обновить процесс уведомления / вывода. У вас также нет логики проверки содержимого файла. Может легко произойти сбой, процедурный или программный, для файлов с не числовым содержимым.