Имя пользователя:
Пароль:
 | Правила  

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

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

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


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

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


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

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

 

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


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

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


там именно 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-й версии

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



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

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


Ветеран


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

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


Не требуется 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
Это сообщение посчитали полезным следующие участники:

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


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


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

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


Спасибо!

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


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


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

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


Скобка не там пропущена, прошу прощения, неверно код вставил. Скобка пропущена в самом конце первого условия, на строчку выше второго условия.
Вот верный кусок:
Код: Выделить весь код
### Условие: если нет указанных файлов по заданному фильтру - выводит в таблицу каталог где их нет ###
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 в 10:35.


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


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


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

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


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

Имеем допотопный скрипт, который ищет файлы в каталогах по маске (за вчерашний день и за позавчерашний день):
Код: Выделить весь код
$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
Друзья, понимаю, что одним спасибо не отделаюсь, поэтому с меня причитается за помощь. Заранее благодарствую...

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


Ветеран


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

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


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

Последний раз редактировалось Kazun, 21-09-2012 в 12:47.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:30, 21-09-2012 | #26



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




 
Переход