У меня есть список компьютеров в CSV-файле, который выполняет резервное копирование образа системы каждое воскресенье в 9 часов утра.
hostname macaddr comments
TOTO-01 842B2BB728C1 Server Room
KOKO-14 842B2BB7420F Server Room
FOFO-25 001AA0485902 Server Room
Я пытаюсь создать сценарий powershell, который включает все компьютеры всписок и делает несколько проверок, чтобы увидеть, если резервное копирование прошло успешно.
Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы скрипт переместился на следующий компьютер в списке, если он не прошел ни одну из проверок.
Мой код:
param
(
[Io.FileInfo]$csvFile = 'C:\Scripts\VipBackUp.csv',
[Io.FileInfo]$WolCmdExe = 'C:\mgmt\tools\WolCmd.exe'
)
######Get the current date - 20 hours.
$GetCurrentDate = (get-date) - (new-timespan -days 6)
$GetCurrentDate
#####Turn on PC
function TurnOnPc
{
$TurnOn = invoke-expression "$WolCmdExe $macaddr 192.168.1.0 255.255.255.255"
write-host ""
write-host "Turning on $hostname.."
if($TurnOn)
{
write-host "$comp has been turned on"
write-host ""
}
else
{
$global:PCTurnOnError = "Yes"
}
}
#####Test PC connectivity
function PingPC
{
Start-Sleep 3
$ping = test-connection -Computername $hostname -count 5 -quiet
write-host "Checking connection for $hostname"
if($ping)
{
write-host "Connection Found for $hostname"
write-host ""
}
else
{
$global:PCPingError = "Yes"
Write-Host "$hostname unreachable"
write-host ""
}
}
#####Check backup files to see if they have been written to.
function CheckWritePC
{
$global:OriginalWrite = Get-ChildItem "C:\Powershell Testing\$hostname.txt"
$global:OriginaSize = (Get-ChildItem "C:\Powershell Testing\$hostname.txt").length
write-host ""
write-host "Checking the following PC if it has been writen to: $hostname"
start-sleep 15
$global:NewWrite = Get-ChildItem "C:\Powershell Testing\$hostname.txt"
$global:Newsize = (Get-ChildItem "C:\Powershell Testing\$hostname.txt").length
$compareWrite = compare-object $OriginalWrite $NewWrite -property Name, lastwritetime | where-object {$_.SideIndicator -eq "=>"}
if($compareWrite)
{
write-host "$hostname has been modified"
$global:HasBeenModified = "Yes"
write-host ""
}
else
{
write-host "$hostname has not been modified"
$global:HasBeenModified = "No"
write-host ""
}
}
#####Check to see if an error log has been recorded.
function CheckEventLog
{
write-host "Checking the following PC for error logs: $hostname"
$hostname | out-null; get-winevent -providername 'Microsoft-Windows-Backup' -computername $hostname | where {$_.id -eq "8" -and $_.timecreated -ge $GetCurrentDate}
$hostname | out-null; if(get-winevent -providername 'Microsoft-Windows-Backup' -computername $hostname | where {$_.id -eq "8" -and $_.timecreated -ge $GetCurrentDate})
{
write-host "$comp received the following eventlog ID: 8"
$global:EventError = "Yes"
write-host ""
}
}
#####Check to see that the size has increased or decreased more than 5%.
function CalculatePercentageDifference
{
$range = 5..-5
write-host "Checking the size difference for $hostname."
$b = $global:Newsize - $global:OriginaSize
$c = $b/$global:OriginaSize * 100
$RoundedNumber = [system.Math]::Round($c, 0)
#write-host $RoundedNumber "%"
if($range -contains $RoundedNumber)
{
write-host "$RoundedNumber%: There has not been a big enough change in the file size"
$global:SizeIsTooSmall = "Yes"
write-host ""
}
else
{
write-host "$RoundedNumber% falls within normal parameters."
write-host ""
}
}
#####################END FUNCTIONS###################################################
Import-Csv $csvFile.FullName | % {
$hostname = $_.hostname
$macaddr = $_.macaddr
Foreach ($_.hostname in $file) {
if ($ErrorMessage){
$foreach.moveNext()
TurnOnPC
if($global:PCTurnOnError -eq 'Yes')
{
#write-host "$hostname did not turn on"
$ErrorMessage = "$hostname Did not turn on"
write-host ""
#email
continue
}
PingPC
if($global:PCPingError -eq 'Yes')
{
$ErrorMessage = "$hostname is unreachable"
write-host ""
#email
continue
}
CheckWritePC
if($HasBeenModified -eq 'No')
{
#Write-host "No write"
$ErrorMessage = " Backup file has not been written to"
#email
continue
}
CheckEventLog
if($EventError -eq 'Yes')
{
$ErrorMessage = " Received an '8' winlog message"
#email
continue
}
else
{
write-host "No event errors recorded"
write-host ""
}
CalculatePercentageDifference
if($SizeIsTooSmall -eq 'Yes')
{
$ErrorMessage = " The file size has not changed enough"
#email
continue
}
}
}
}