PDA

Показать полную графическую версию : [решено] скрипт для выявления невыполненных ежедневных бэкапов


Страниц : 1 [2]

JumpDa
20-09-2012, 17:04
там именно Out-String, опечатался в предыдущем сообщении...

>> ### Условие: если все впорядке и файлы есть - выводит в таблицу список файлов и некоторые свойства файла ###
>> 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
>>
Отсутствует закрывающая "}" в блоке инструкций.
строка:14 знак:1
+ <<<< ) | Out-String
+ CategoryInfo : ParserError: (CloseBraceToken:TokenId) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndCurlyBrace


Возможно нужен 3-й PowerShell? Пробую на 2-й версии

Kazun
20-09-2012, 17:10
Не требуется PowerShell V3,тут скобка пропущена:
$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

JumpDa
20-09-2012, 17:17
Спасибо!

rudimko
20-09-2012, 20:03
Скобка не там пропущена, прошу прощения, неверно код вставил. Скобка пропущена в самом конце первого условия, на строчку выше второго условия.
Вот верный кусок:

### Условие: если нет указанных файлов по заданному фильтру - выводит в таблицу каталог где их нет ###
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

rudimko
21-09-2012, 11:07
Еще раз о крике помощи

Имеем допотопный скрипт, который ищет файлы в каталогах по маске (за вчерашний день и за позавчерашний день):

$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
21-09-2012, 12:30
$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 "Каталог","Имя","Размер Позавчера","Размер Вчера","ОТМЕТКИ"




© OSzone.net 2001-2012