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

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

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

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


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

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


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

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

 

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


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

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


Спасибо, велики Гуру! +++++ тебе в карму

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



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

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


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


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

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


Я, наверное, очень сильно замучил тебя, но возникла еще одна потребность...
А можно как-то используя форматирование (Format-Table) вывести название папок в столбике отдельно? Т.е. чтобы помимо имени файла и размера (Format Table Name, Length) было еще название папки в которой лежат файлы?

Отправлено: 19:47, 11-09-2012 | #12


Ветеран


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

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


Добавить свойство DirectoryName.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:17, 11-09-2012 | #13


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


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

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


Здорово. А можно как-то сократить? А то выводит, например: "C:\Temp\1\2\", а надо только "2".

Отправлено: 20:37, 11-09-2012 | #14


Ветеран


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

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


Format Table Name, Length, @{n="Parent";e={$_.Directory.Name}}
Это сообщение посчитали полезным следующие участники:

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


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


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

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


Все отлично отработало. Спасибо!
Жаль только что в письме или если выводить в файл, то вся таблица кривая становится, видимо это из за шрифтов. Есть какое-нибудь гуманное решение может быть?

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


Ветеран


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

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


rudimko, использовать моноширинный шрифт или делать вывод в таблице (для html).
Это сообщение посчитали полезным следующие участники:

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


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


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

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


Сделал вывод в таблицах HTML, все получилось. Теперь встала другая задача для усовершенствования скрипта.

Для начала распишу для чего все это делается и как:
1. Скрипт предназначен для выявления проблем хранения бэкапов
- находит файлы по маске созданные за вчерашний день
- находит каталоги в которых по маске не созданы файлы за вчерашний день
- записывает результаты в переменную и отправляет на эл. ящик

2. Сам скрипт:
читать дальше »

Код: Выделить весь код
### Дата и пути ###
$Days = "-1"
$Date = Get-Date 
$Yesterday = Get-Date $Date.AddDays($Days) -Format "dd/MM/yyyy"
$YesterdayF = Get-Date $Yesterday -Format "yyyyMMdd"
$Path = "Пусть к каталогу"
$Host1 = "Имя хоста"

### Стиль для HTML ###
$Style = "<style>"
$Style = $Style + "BODY{background-color:#FFFFFF; font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px;}"
$Style = $Style + "TABLE{border-width: 3px; border-style: solid; border-color: white; border-collapse: collapse;}"
$Style = $Style + "TH{text-align:left; border-width: 3px; padding: 8px; border-style: solid; border-color: white; background-color:#BDBDBD}"
$Style = $Style + "TD{text-align:left; border-width: 3px; padding: 8px; border-style: solid; border-color: white; background-color:#DEDEDE}"
$Style = $Style + "</style>"

### Поиск несуществующих файлов с заданным фильтром ###
$NotExist = Get-ChildItem -Path $Path -Recurse | 
Where-Object {$_.PsIsContainer} | 
Where-Object {!($_.GetFiles()| Where-Object {".bak",".zip" -eq $_.Extension} | Where-Object {$_.Name -like "*$YesterdayF*"})}

### Поиск существующих файлов с заданным фильтром ###
$Exist = Get-ChildItem -Path $Path -Recurse -Include "*.*" | 
Where-Object {".bak",".zip" -eq $_.Extension} |
Where-Object {$_.Name -like "*$YesterdayF*"}

$Body = @(
$Style

### Условие: если нет указанных файлов по заданному фильтру - выводит в таблицу каталог где их нет ###
if ($NotExist -gt $null) {
	"<font color=red>В каталогах нет обновлений</font>"
	$NotExist | ConvertTo-Html -Fragment @{Label="Каталог";e={$_.Name}}, @{Label="Последнее обновление";e={$_.LastWriteTime}}

### Условие: если все впорядке и файлы есть - выводит в таблицу список файлов и некоторые свойства файла ###
if ($Exist -gt $null) {
	"<br><font color=green>$Host1 - Файлы обновленных бэкапов за $Yesterday</font>"
	$Exist | ConvertTo-Html -Fragment @{Label="Тип";e={$_.Extension}}, @{Label="Каталог файла";e={$_.Directory.Name}}, @{Label="Имя файла";e={$_.BaseName}}, @{Label="Размер Мб";e={"{0:N0}" -f ($_.Length/1mb)}}
}
) | Out-String

### Почтовые переменные ###
$EmailTo = "backup@mail.ru"
$Subject = "Отчет о бэкапах за $Yesterday на $Host1"
$EmailFrom = "backup@mail.ru"

### Настройки SMTP на .NET  ###
$SMTPServer = "server.mail.ru"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25) 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("backup@mail.ru", "password"); 
$Message = New-Object Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body)
$Message.IsBodyHtml = $True
$SMTPClient.Send($Message)


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

Сравнение:
1. Размер файла (если он уменьшился на 0.5мб, то нужно как-то это отметить в таблице, например поставить воскл. знак в сл. столбце)
2. Если нет файла за вчера, выводит в строку за позавчера и так же воскл. знак в сл. графе

В общем задумка примерно такая, но не знаю как ее реализовать и возможно ли это вообще... Буду всем признателен, кто поможет в разработке данного скрипта. Спасибо заранее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:13, 19-09-2012 | #18


Новый участник


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

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


Почему-то выдает ошибку после Out-Strng:


Отсутствует закрывающая "}" в блоке инструкций.
строка:15 знак:1
+ <<<< ) | Out-String
+ CategoryInfo : ParserError: (CloseBraceToken:TokenId) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndCurlyBrace

Отправлено: 15:06, 20-09-2012 | #19


Ветеран


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

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


Должно быть Out-String.

Отправлено: 16:34, 20-09-2012 | #20



Компьютерный форум 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




 
Переход