Quantcast
Channel: Windows PowerShell Forum
Viewing all articles
Browse latest Browse all 2314

PowerShell Skript funktioniert am Windows2013 server seid ca. zwei Monaten nicht mehr in der Aufgabenplanung

$
0
0

Guten Morgen,

Ich verwende auf einen 2013 SBE Server schon Jahre ein ps1 Skript fürs Backup mit der Aufgabenplanung.

Hat immer funktioniert aber seid zwei Monaten kann er über die Aufgabenplanung nicht mehr auf das NAS.

Direkt ausgeführt läuft das Skript nach wie vor - ich teste vor dem Backup mit einer Schleife die Verfügbarkeit vom NAS und test-path fliegt schon raus -über die Aufgabenplanung - zu irgend etwas danach kommt es gar nicht mehr...
Benutzer und Zugriffe auf den Serverbereich und auf das NAS funktionieren - auch die Ausführungsrechte in der Konsole - Interessant ist eigentlich erst der Skriptbeginn und die Fett geschriebene Zeile - dort fliegt er seid zwei Monaten über die Aufgabenplanung raus - 5 Jahre hat es funktioniert - und direkt gestartet funktioniert es nach wie vor.

Ich hoffe ihr könnt mir helfen

PS: die Maildaten habe ich hier für die Veröffentlichung aus dem Skript gelöscht und am Anfang gibt es noch ein paar Funktionen die aber gar nie ausgeführt werden da das Skript schon bei test-path praktisch beendet wird..

# Funktionen
#############################################################################
# liefert True wenn der letzte des Monats ist, sonst false
function get-Monatsende($I)
{
    if($I -eq $null){$I = 0}
    $I=$I+1
    $akt_Datum=get-date

    $test_Datum = $akt_Datum.adddays($I)
    $I=$null
    if ($test_datum.Month -eq $akt_Datum.month) {Return 0}{return 1}
}

#liefert die Vorsilbe für den Verzeichnisnamen 
#   D_ =Tagesbackup
#   W_ =Wochenbackup
#   M_ =Monatsbackup
#   0  =KeinBackup - Samstag oder Sonntag
function get-TypeOfBackup($I)
{
    if($I -eq $null){$I = 0}
    $akt_Datum=get-date -date $(get-date).adddays($I)
    if (get-Monatsende -eq TRUE)
    {    
        if ($akt_Datum.dayofweek -eq "Monday"){return "M_"}
        if ($akt_Datum.dayofweek -eq "Tuesday"){return "M_"}
        if ($akt_Datum.dayofweek -eq "Wednesday"){return "M_"}
        if ($akt_Datum.dayofweek -eq "Thursday"){return "M_"}
        if ($akt_Datum.dayofweek -eq "Friday") {return "M_"}
    }
    if ($akt_Datum.dayofweek -eq "Monday"){return "D_"}
    if ($akt_Datum.dayofweek -eq "Tuesday"){return "D_"}
    if ($akt_Datum.dayofweek -eq "Wednesday"){return "D_"}
    if ($akt_Datum.dayofweek -eq "Thursday"){return "D_"}
    if ($akt_Datum.dayofweek -eq "Friday")
    {
        if (get-Monatsende 1 -eq TRUE){return "M_"}
        if (get-Monatsende 2 -eq TRUE){return "M_"}
        return "W_"
    }   
    return 0
}

#Liefert das Backupverzeichnis
#Durchsucht die vorhandenen Verzeichnisse - benennt um, erstellt neu und löscht unnötige
function get-BackupDir($I)
{
    Set-Location $Dir_Ziel
    #$I="D_"
    if ($I -eq "M_"){$Number_of_Backups = $I_MONAT}
    if ($I -eq "W_"){$Number_of_Backups = $I_WOCHE}
    if ($I -eq "D_"){$Number_of_Backups = $I_TAG}
    $Count=0
    $I=$I+"*"
    $Log = " Vorher #######################################################"
    $Log >> $Logfile
    $log = gci $dir_Ziel  -filter $I |sort  
    $Log >> $Logfile
    foreach ($dir in Get-ChildItem $I| ? { $_.PSisContainer -eq $true})
    {
        $Count=$count+1
    }
	If ($Number_of_Backups -eq $count)
    {
        if (test-path "$dir_Ziel\$akt_Directory")
        {
        }
        else
        {
            rename-item (gci $dir_Ziel  -filter $I | ? { $_.PSisContainer -eq $true} |sort | Select -First 1) -NewName  "$dir_Ziel\$akt_Directory"
        }
    }
    If ($Number_of_Backups -gt $count)
	{
        cd $Dir_Ziel
        mkdir $akt_Directory
    }
    If ($Number_of_Backups -lt $count)
	{
		$Count=$count-$Number_of_Backups
		remove-item (gci $dir_Ziel  -filter $I | ? { $_.PSisContainer -eq $true} |sort | Select -First $Count) -Recurse
		if (test-path "$dir_Ziel\$akt_Directory")
		{
		}
		else
		{
			rename-item (gci $dir_Ziel  -filter $I | ? { $_.PSisContainer -eq $true} |sort | Select -First 1) -NewName  "$dir_Ziel\$akt_Directory"
		}
    }
   $Log = " "
   $Log >> $Logfile
   $Log = " "
   $Log >> $Logfile
   $Log = " "
   $Log >> $Logfile
   $Log = " Nachher #######################################################"
   $Log >> $Logfile
   $log = gci $dir_Ziel  -filter "*" |sort  
   $Log >> $Logfile
}


#versendet die E-Mai
function send_email {
	$mailmessage = New-Object system.net.mail.mailmessage 
	$mailmessage.from = ($emailfrom) 
	$mailmessage.To.add($emailto)
	$mailmessage.Subject = $emailsubject
	$mailmessage.Body = $emailbody
	$attachment = New-Object System.Net.Mail.Attachment($LogFile, 'text/plain')
	$mailmessage.Attachments.Add($attachment)
	$attachment = New-Object System.Net.Mail.Attachment($LogFileRC, 'text/plain')
	$mailmessage.Attachments.Add($attachment)
	#$mailmessage.IsBodyHTML = $true
	$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, $SMTPPort)  
	$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("$SMTPAuthUsername", "$SMTPAuthPassword") 
	$SMTPClient.EnableSsl = 1
	$SMTPClient.Send($mailmessage)
	$attachment.Dispose()
	$mailmessage.Dispose()
}
#############################################################################################



#Beginn Backup Skript
#Andreas Krapf
#******************

########################
#Variablendefinition
########################
#Anzahl der Tagessicherungen (4 Ergibt eine Woche gültige Sicherung, danach wird die älteste Überschrieben)
$I_TAG = 4
#Anzahl der Wochensicherungen (4 Wochen gültige Sicherung, danach wird die älteste Überschrieben)
$I_WOCHE = 4
#Anzahl der Monatssicherungen (12 Monate gültige Sicherung, danach wird die älteste Überschrieben)
$I_MONAT = 12 
#Intervallgültigkeit Tag oder Monate
# Quell, Log und Zielverzeichnis
$Dir_Quelle = "D:\Daten"
$Dir_Ziel = "\\192.168.0.100\backup"
$Dir_Log = "d:\Daten\#backup\log"


#Mailfunktion
##################################
$EmailFrom = ""
$EmailTo = ""
$EmailSubject = ""  
$SMTPServer = ""
$SMTPPort = 
$SMTPAuthUsername = ""
$SMTPAuthPassword = ""
$emailattachment = ""



#################################
#Verzeichnisnamen mit Aktuellem Datum, und das zu überschreibende Datum festlegen
$akt_Datum = Get-Date -format "yyyy_MM_dd"
$EmailSubject = $EmailSubject + $akt_Datum
$LogFile = $Dir_Log + "\" + $akt_Datum + ".txt"
$LogfileRC = $Dir_Log + "\" + $akt_Datum + "RC.txt"
#NAS ansprechen
test-path "$dir_Ziel"
#NAS Zeit zum aufwachen geben
Start-Sleep -s 60

if (test-path "$dir_Ziel")
{
	$I_TOB = get-TypeOfBackup

	$akt_Datum = Get-Date -format "yyyy_MM_dd"
	$akt_Directory = $I_TOB+$akt_Datum


	if ($I_TOB)
	{
		get-BackupDir($I_TOB)
		robocopy "$Dir_Quelle" "$Dir_Ziel\$akt_Directory" /mir /r:3 /w:1  /ndl /np /njh /nfl /log+:$LogFileRC
    }
	else
	{
		$Log = $Log +  "Wochenende"
	}
}
else 
{
    $Log = $Log +  $dir_Ziel+"NAS nicht verfügbar" 
    $EmailSubject = $EmailSubject + "NAS OFFLINE"
}

$Log >> $Logfile
send_email


Viewing all articles
Browse latest Browse all 2314


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>