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

Аватара пользователя
Kazun

Re: PowerShell - [решено] скрипт для выявления невыполненных ежедневных бэкапов

Сообщение Kazun »

Не требуется 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 - [решено] скрипт для выявления невыполненных ежедневных бэкапов

Сообщение JumpDa »

Скобка не там пропущена, прошу прощения, неверно код вставил. Скобка пропущена в самом конце первого условия, на строчку выше второго условия.

Вот верный кусок:



Код:

Код: Выделить всё

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

Сообщение rudimko »

Еще раз о крике помощи



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



Код:

Код: Выделить всё

$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 - [решено] скрипт для выявления невыполненных ежедневных бэкапов

Сообщение Kazun »

Код:

Код: Выделить всё

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

Вернуться в «Скриптовые языки администрирования Windows»