Показать полную графическую версию : [решено] скрипт для выявления невыполненных ежедневных бэкапов
там именно 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-й версии
Не требуется 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
Скобка не там пропущена, прошу прощения, неверно код вставил. Скобка пропущена в самом конце первого условия, на строчку выше второго условия.
Вот верный кусок:
### Условие: если нет указанных файлов по заданному фильтру - выводит в таблицу каталог где их нет ###
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
Еще раз о крике помощи
Имеем допотопный скрипт, который ищет файлы в каталогах по маске (за вчерашний день и за позавчерашний день):
$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
Друзья, понимаю, что одним спасибо не отделаюсь, поэтому с меня причитается за помощь. Заранее благодарствую...
$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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC