PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов
-
JumpDa
Re: PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов
Должно быть Out-String.
-
Kazun
Re: PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов
Не требуется PowerShell V3,тут скобка пропущена:
Код:
Код:
Код: Выделить всё
$Body = @(
$Style
### Условие: если нет указанных файлов по заданному фильтру - выводит в таблицу каталог где их нет ###
if ($NotExist -gt $null) {
"В каталогах нет обновлений"
$NotExist | ConvertTo-Html -Fragment @{Label="Каталог";e={$_.Name}}, @{Label="Последнее обновление";e={$_.LastWriteTime}}
### Условие: если все впорядке и файлы есть - выводит в таблицу список файлов и некоторые свойства файла ###
if ($Exist -gt $null) {
"
$Host1 - Файлы обновленных бэкапов за $Yesterday"
$Exist | ConvertTo-Html -Fragment @{Label="Тип";e={$_.Extension}}, @{Label="Каталог файла";e={$_.Directory.Name}}, @{Label="Имя файла";e={$_.BaseName}}, @{Label="Размер Мб";e={"{0:N0}" -f ($_.Length/1mb)}}
}
}) | Out-String-
JumpDa
Re: PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов
Скобка не там пропущена, прошу прощения, неверно код вставил. Скобка пропущена в самом конце первого условия, на строчку выше второго условия.
Вот верный кусок:
Код:
Вот верный кусок:
Код:
Код: Выделить всё
### Условие: если нет указанных файлов по заданному фильтру - выводит в таблицу каталог где их нет ###
if ($NotExist -gt $null) {
"В каталогах нет обновлений"
$NotExist | ConvertTo-Html -Fragment @{Label="Каталог";e={$_.Name}}, @{Label="Последнее обновление";e={$_.LastWriteTime}}
}
### Условие: если все впорядке и файлы есть - выводит в таблицу список файлов и некоторые свойства файла ###
if ($Exist -gt $null) {
"
$Host1 - Файлы обновленных бэкапов за $Yesterday"
$Exist | ConvertTo-Html -Fragment @{Label="Тип";e={$_.Extension}}, @{Label="Каталог файла";e={$_.Directory.Name}}, @{Label="Имя файла";e={$_.BaseName}}, @{Label="Размер Мб";e={"{0:N0}" -f ($_.Length/1mb)}}
}
) | Out-String-
rudimko
Re: PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов
Еще раз о крике помощи
Имеем допотопный скрипт, который ищет файлы в каталогах по маске (за вчерашний день и за позавчерашний день):
Код:
Если сделать вывод:
Код:
Получается вот такая табличка (в Base_1 отсутствует файл за позавчера, в Base_4 файл за вчерашнюю дату отсутствует):
Цитата:
Каталог | Имя | Размер
------- | --- | ------
Base_1 | base_1_20120920.txt | 0,011
Base_2 | base_2_20120919.txt | 0,000
Base_2 | base_2_20120920.txt | 0,011
Base_3 | base_3_20120919.txt | 0,000
Base_3 | base_3_20120920.txt | 0,011
Base_4 | base_4_20120919.txt | 0,000
Base_5 | base_5_20120919.txt | 0,010
Base_5 | base_4_20120920.txt | 0,005
Теперь вопрос о том как сделать вывод таблички с следующими условиями:
1. Каталог
2. Имя файла (вчерашний файл, если его нет, тогда позавчерашний)
3. Размер Позавчерашнего файла если он есть)
4. Размер Вчерашнего файла (если он есть)
5. Вывод отметок по условиям
(ставить ОК: если имеется вчерашний файл и его размер не равен 0, если есть позавчерашний и вчерашний;
ставить FAIL: если есть позавчерашний файл, а вчерашнего нет, если вчерашний файл меньше по размеру чем позавчерашний)
Пример выходной таблички:
Цитата:
Каталог | Имя | Размер Позавчера | Размер Вчера | ОТМЕТКИ
------- | --- | ---------------- | ------------ | -------
Base_1 | base_1_20120920.txt | - | 0,011 | ОК
Base_2 | base_2_20120920.txt | 0,000 | 0,011 | ОК
Base_3 | base_3_20120920.txt | 0,000 | 0,011 | ОК
Base_4 | base_4_20120919.txt | 0,000 | - | FAIL
Base_5 | base_5_20120920.txt | 0,010 | 0,005 | FAIL
Друзья, понимаю, что одним спасибо не отделаюсь, поэтому с меня причитается за помощь. Заранее благодарствую...
Имеем допотопный скрипт, который ищет файлы в каталогах по маске (за вчерашний день и за позавчерашний день):
Код:
Код: Выделить всё
$Date = Get-Date
$Yesterday = Get-Date $Date.AddDays(-1) -Format "dd/MM/yyyy"
$YesterdayF = Get-Date $Yesterday -Format "yyyyMMdd"
$BeforeYesterday = Get-Date $Date.AddDays(-2) -Format "dd/MM/yyyy"
$BeforeYesterdayF = Get-Date $BeforeYesterday -Format "yyyyMMdd"
$Path = "C:\test"
$Exist = Get-ChildItem -Path $Path -Recurse -Include "*.*" | Where-Object {$_.Name -like "*$YesterdayF*"}
$Exist = $Exist + (Get-ChildItem -Path $Path -Recurse -Include "*.*" | Where-Object {$_.Name -like "*$BeforeYesterdayF*"})Если сделать вывод:
Код:
Код: Выделить всё
$Exist | Sort-Object -Property $_.Name | Format-Table @{Label="Каталог";e={$_.Directory.Name}}, @{Label="Имя";e={$_.Name}}, @{Label="Размер";e={"{0:N3}" -f ($_.Length/1mb)}}Получается вот такая табличка (в Base_1 отсутствует файл за позавчера, в Base_4 файл за вчерашнюю дату отсутствует):
Цитата:
Каталог | Имя | Размер
------- | --- | ------
Base_1 | base_1_20120920.txt | 0,011
Base_2 | base_2_20120919.txt | 0,000
Base_2 | base_2_20120920.txt | 0,011
Base_3 | base_3_20120919.txt | 0,000
Base_3 | base_3_20120920.txt | 0,011
Base_4 | base_4_20120919.txt | 0,000
Base_5 | base_5_20120919.txt | 0,010
Base_5 | base_4_20120920.txt | 0,005
Теперь вопрос о том как сделать вывод таблички с следующими условиями:
1. Каталог
2. Имя файла (вчерашний файл, если его нет, тогда позавчерашний)
3. Размер Позавчерашнего файла если он есть)
4. Размер Вчерашнего файла (если он есть)
5. Вывод отметок по условиям
(ставить ОК: если имеется вчерашний файл и его размер не равен 0, если есть позавчерашний и вчерашний;
ставить FAIL: если есть позавчерашний файл, а вчерашнего нет, если вчерашний файл меньше по размеру чем позавчерашний)
Пример выходной таблички:
Цитата:
Каталог | Имя | Размер Позавчера | Размер Вчера | ОТМЕТКИ
------- | --- | ---------------- | ------------ | -------
Base_1 | base_1_20120920.txt | - | 0,011 | ОК
Base_2 | base_2_20120920.txt | 0,000 | 0,011 | ОК
Base_3 | base_3_20120920.txt | 0,000 | 0,011 | ОК
Base_4 | base_4_20120919.txt | 0,000 | - | FAIL
Base_5 | base_5_20120920.txt | 0,010 | 0,005 | FAIL
Друзья, понимаю, что одним спасибо не отделаюсь, поэтому с меня причитается за помощь. Заранее благодарствую...
-
Kazun
Re: PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов
Код:
Код: Выделить всё
$Date = Get-Date
$Yesterday = Get-Date $Date.AddDays(-1) -Format "dd/MM/yyyy"
$YesterdayF = Get-Date $Yesterday -Format "yyyyMMdd"
$BeforeYesterday = Get-Date $Date.AddDays(-2) -Format "dd/MM/yyyy"
$BeforeYesterdayF = Get-Date $BeforeYesterday -Format "yyyyMMdd"
$Path = "D:\test"
$files = Get-ChildItem -Path $Path -Recurse | Where {$_.Name -match "$YesterdayF|$BeforeYesterdayF" -and !$_.PsIsContainer} |
Group-Object {$_.Directory.Name} -AsString -AsHashtable
$files.GetEnumerator() | Foreach {
$value = $_.value
if($value.Count -eq 1)
{
$size = $value[0].Length
$name = $value[0].Name
$fname = $_.Name
if($name -match "$BeforeYesterdayF")
{
$Status = "Fail"
$SizeBeforeYesterday = "{0:N3}" -f ($size/1mb)
$SizeYesterday = "-"
}
else
{
if ($size)
{
$Status = "OK"
}
else
{
$Status = "Fail"
}
$SizeBeforeYesterday = "-"
$SizeYesterday = "{0:N3}" -f ($size/1mb)
}
New-Object PsObject -Property @{
"Каталог" = $fname
"Имя" = $name
"Размер Позавчера" = $SizeBeforeYesterday
"Размер Вчера" = $SizeYesterday
"ОТМЕТКИ" = $Status
}
}
else {
$FileBefore = ($value -match "$BeforeYesterdayF")[0]
$FileYesterday = ($value -match "$YesterdayF")[0]
if (($FileYesterday.Length - $FileBefore.Length) -gt 0)
{
$Status = "OK"
}
else {
$Status = "Fail"
}
New-Object PsObject -Property @{
"Каталог" = $_.Name
"Имя" = $FileYesterday.Name
"Размер Позавчера" = $("{0:N3}" -f ($FileBefore.Length/1mb))
"Размер Вчера" = $("{0:N3}" -f ($FileYesterday.Length/1mb))
"ОТМЕТКИ" = $Status
}
}
} | Format-Table "Каталог","Имя","Размер Позавчера","Размер Вчера","ОТМЕТКИ"