|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов |
|
|
PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов
|
Пользователь Сообщения: 126 |
Друзья, помогите решить проблему, не могу сделать правильный вывод данных. Как вывести только названия тех папок, где не существуют файлы, которые будут заданы в условие (к примеру $_.LastWriteTime не являются вчерашней датой). Заранее спасибо.
|
|
Отправлено: 20:54, 10-09-2012 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Как пример,найти все папки в которых нет файлов,измененных сегодня:
Get-ChildItem D:\Temp -Recurse | Where {$_.PsIsContainer} | Where {!($_.GetFiles()| Where {$_.LastWriteTime -ge [datetime]::Today})} | Format-Table FullName |
Последний раз редактировалось Kazun, 11-09-2012 в 00:13. Отправлено: 00:00, 11-09-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 126
|
Профиль | Отправить PM | Цитировать Спасибо, все отлично отработало. Еще малюсенький вопрос: Я делаю вывод в таблицу "Format-Table -auto FullName, Length, LastWriteTime", а как мне вывести "Length" в мегабайтах, а не в байтах?
|
Отправлено: 10:48, 11-09-2012 | #3 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Format-Table -auto FullName, @{n="Length(MB)";e={"{0:N2}" -f ($_.Length/1mb)}}, LastWriteTime
|
Отправлено: 11:05, 11-09-2012 | #4 |
Пользователь Сообщения: 126
|
Профиль | Отправить PM | Цитировать Здорово! И последний вопрос:
Вот код: $Days = "-1" $Date = Get-Date $Yesterday = Get-Date $Date.AddDays($Days) -Format "dd/MM/yyyy" $YesterdayF = Get-Date $Yesterday -Format "yyyyMMdd" $Path = "C:\test" $NotExist = Get-ChildItem -Path $Path -Recurse | Where-Object {$_.PsIsContainer} | Where-Object {!($_.GetFiles()| Where-Object {$_.LastWriteTime -lt $Yesterday})} | Format-Table FullName, LastWriteTime if ($NotExist -gt $null) { Write-Output $NotExist } else { Write-Host "Файлы за $Yesterday" Write-Host "" } $Exist = Get-ChildItem -Path $Path -Recurse -Include "*.*" | Where-Object {$_.FullName -like "*$YesterdayF*"} | Format-Table -auto FullName, @{n="Length(Mb)";e={"{0:N2}" -f ($_.Length/1mb)}}, LastWriteTime if ($Exist -gt $null) { Write-Host "Каталоги с не обновленными файлами" Write-Output $Exist } $EmailFrom = "test@test.ru" $EmailTo = "test@test.ru>" $Subject = "Заголовок" $Body = "СООБЩЕНИЕ" $SMTPServer = "mail.test.ru" $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25) $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("LOGIN", "PASS"); $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body) |
|
Отправлено: 13:19, 11-09-2012 | #5 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Для начала разберитесь с логикой, а то тут странно получается:
1) Проверяем каталоги на условие 2) Если удовлетворяет условию, выводим каталоги 3) Не удовлетворяет условию,выводим -"Файлы за $Yesterday" 4) Получаем список файлов в пути,которых есть $YesterdayF 5) Если удовлетворяет условию,выводим "Каталоги с не обновленными файлами" и файлы Зачем дважды гонять не быструю операцию,как Get-ChildItem -Path $Path -Recurse,проще сохранить результат один раз в переменную и в дальнейшем уже использовать. |
Отправлено: 15:11, 11-09-2012 | #6 |
Пользователь Сообщения: 126
|
Профиль | Отправить PM | Цитировать Так как с PowerShell знаком только третий день, то мне самому сложно понять как это сделать
![]() Когда сохраняю весь результат в переменную и подставляю ее в $Body, то тело письма содержит весь код, а не результат. Как сделать правильно? |
Отправлено: 15:27, 11-09-2012 | #7 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Будь по-вашему.
$NotExist = Get-ChildItem -Path $Path -Recurse | Where-Object {$_.PsIsContainer} | Where-Object {!($_.GetFiles()| Where-Object {$_.LastWriteTime -lt $Yesterday})} | Format-Table FullName, LastWriteTime $Exist = Get-ChildItem -Path $Path -Recurse -Include "*.*" | Where-Object {$_.FullName -like "*$YesterdayF*"} | Format-Table -auto FullName, @{n="Length(Mb)";e={"{0:N2}" -f ($_.Length/1mb)}}, LastWriteTime $Body = @( if ($NotExist -gt $null) { $NotExist } else { "Файлы за $Yesterday" "" } if ($Exist -gt $null) { "Каталоги с не обновленными файлами" $Exist } ) | Out-String |
Отправлено: 15:40, 11-09-2012 | #8 |
Пользователь Сообщения: 126
|
Профиль | Отправить PM | Цитировать Не вышло. Сформировалось письмо следующего соодержания:
Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.GroupStartData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.GroupEndData Microsoft.PowerShell.Commands.Internal.Format.FormatEndData |
Отправлено: 15:55, 11-09-2012 | #9 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Скопируйте правильно,что я привел,там этой не возникает таких проблем и весь вывод в переменной $Body
|
Отправлено: 16:05, 11-09-2012 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Вывод имени текущего пользователя | Sadowod | Скриптовые языки администрирования Windows | 24 | 27-12-2012 10:13 | |
Разное - какие файлы и папки я могу смело удалить из папки windows | fyt | Microsoft Windows 2000/XP | 6 | 05-01-2012 18:14 | |
Ошибка - Каракули в реестре "Синтаксическая ошибка в имени файла,имени папки или метке тома" | permas | Microsoft Windows 2000/XP | 2 | 20-02-2010 19:30 | |
Вывод размера папки в отдельный файл скриптом | Whiteee | Microsoft Windows NT/2000/2003 | 1 | 16-07-2008 14:06 | |
[решено] После интеграции SP2 в дистрибутиве отсутствуют некоторые файлы | bruder | Microsoft Windows 2000/XP | 6 | 03-03-2006 04:45 |
|