Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов

Ответить
Настройки темы
PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов

Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить PM | Цитировать


Изменения
Автор: rudimko
Дата: 19-09-2012
Описание: изменил название темы
Друзья, помогите решить проблему, не могу сделать правильный вывод данных. Как вывести только названия тех папок, где не существуют файлы, которые будут заданы в условие (к примеру $_.LastWriteTime не являются вчерашней датой). Заранее спасибо.

Отправлено: 20:54, 10-09-2012

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Как пример,найти все папки в которых нет файлов,измененных сегодня:
Код: Выделить весь код
Get-ChildItem D:\Temp -Recurse | Where {$_.PsIsContainer} | 
             Where {!($_.GetFiles()| Where {$_.LastWriteTime -ge [datetime]::Today})} | Format-Table FullName
Для версии V3 немного покороче:
Код: Выделить весь код
Get-ChildItem D:\Temp -Recurse -Directory | 
             Where {!($_.GetFiles().LastWriteTime -ge [datetime]::Today)} | Format-Table FullName

Последний раз редактировалось Kazun, 11-09-2012 в 00:13.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:00, 11-09-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить PM | Цитировать


Спасибо, все отлично отработало. Еще малюсенький вопрос: Я делаю вывод в таблицу "Format-Table -auto FullName, Length, LastWriteTime", а как мне вывести "Length" в мегабайтах, а не в байтах?

Отправлено: 10:48, 11-09-2012 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Format-Table -auto FullName, @{n="Length(MB)";e={"{0:N2}" -f ($_.Length/1mb)}}, LastWriteTime
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:05, 11-09-2012 | #4


Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить 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
}
Хочу вывести результат скрипта в сообщение, т.е. приравнять результат к $Body, никак не получается. Прошу помочь с этим справиться:

Код: Выделить весь код
$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
Благодарности: 861

Профиль | Отправить PM | Цитировать


Для начала разберитесь с логикой, а то тут странно получается:
1) Проверяем каталоги на условие
2) Если удовлетворяет условию, выводим каталоги
3) Не удовлетворяет условию,выводим -"Файлы за $Yesterday"
4) Получаем список файлов в пути,которых есть $YesterdayF
5) Если удовлетворяет условию,выводим "Каталоги с не обновленными файлами" и файлы

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

Отправлено: 15:11, 11-09-2012 | #6


Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить PM | Цитировать


Так как с PowerShell знаком только третий день, то мне самому сложно понять как это сделать
Когда сохраняю весь результат в переменную и подставляю ее в $Body, то тело письма содержит весь код, а не результат. Как сделать правильно?

Отправлено: 15:27, 11-09-2012 | #7


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить 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
Благодарности: 3

Профиль | Отправить 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
А можно как-то вывод всех данных назначить в переменную? Чтобы потом подставить в Body?

Отправлено: 15:55, 11-09-2012 | #9


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Скопируйте правильно,что я привел,там этой не возникает таких проблем и весь вывод в переменной $Body
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:05, 11-09-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход