Wednesday, February 5, 2014

Backup Lync 2010 Remotely from Orchestrator

Backup Lync 2010 Remotely from Orchestrator


Prerequisites: Lync 2010 Cmdlets installed on Orchestrator Server.
Files needed: DBImpExp.exe


So I needed a way to backup Lync 2010 configuration. Since I have snap shots of the VM I can have a restored Lync environment up in a few hours. But all of my configuration changes will be missing.

This is where Orchestrator Runbook comes into play.

Simple layout
Monitor Date Time
Check Schedule
Export DBImpExp
Sleep (Note Runbook is faster than my script so I need to slow it down)
Script-Export


Now for the Code:

Export DBImpExp:
cd \
cd "C:\Program Files\Common Files\Microsoft Lync Server 2010\Support"
start-process dbimpexp.bat


dbimpexp.bat


@ECHO OFF
REM CD "C:\Program Files\Common Files\Microsoft Lync Server 2010\Support"
dbimpexp.exe /hrxmlfile:"E:\masterbackup\Lync-Backups\BackupFiles\DBImpExp.xml" /sqlserver:nlkvsqldba04\lync_prod
 

Sleep:
PING 127.0.0.1 -n 50 (I do a simple ping, always works!)

Export DBImpExp: once you get all of this data I like to package it into a zip file.


############# NEW-ZIP ############################
function New-Zip
{
  param(
 [Parameter(Mandatory=$true,
  Position=0,
  ValueFromPipeline=$true)]
 [String]
 $Path,
 
 [Switch]
 $PassThru,
 
 [Switch]
 $Force
 )
 process {

   if (Test-Path $path)
   {
    if (-not $Force) { 
     return
    }
   }
   Set-Content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
   $item = Get-Item $path
   $item.IsReadOnly = $false 
   if ($passThru) { $item } 
  
 }
}

Here is the Function to Copy to Zip file

########## Copy-ToZip ###########################
function Copy-ToZip
{
param(
  [Parameter(Mandatory=$true,
    Position=0,
    ValueFromPipelineByPropertyName=$true)]
  [Alias('FullName')]
  [String]$File,

  [Parameter(Mandatory=$true,Position=1)]
  [String]$ZipFile,
  
  [Switch]$HideProgress,

  [Switch]$Force
  )
  begin {

      $ShellApplication = New-Object -ComObject Shell.Application
      if (-not (Test-Path $ZipFile)) {
        New-Zip $ZipFile
      }
      $Path = Resolve-Path $ZipFile
      $ZipPackage =$ShellApplication.Namespace("$Path")
    
  }
  process {

      $RealFile = Get-Item $File
      if (-not $RealFile) { return }    
      if (-not $hideProgress) {
        $perc +=5 
        if ($perc -gt 100) { $perc = 0 } 
        Write-Progress "Copying to $ZipFile" $RealFile.FullName -PercentComplete $perc
      }
      $Flags = 0
      if ($force) {
        $flags = 16 -bor 1024 -bor 64 -bor 512
      } 
      Write-Verbose $realFile.Fullname
      $ZipPackage.CopyHere($realFile.Fullname, $flags)
      Start-Sleep -Milliseconds 500
    
  }
}
Here is where I move the XML Files into the Zip file
I also call 4 other Lync Cmdlets
export-csconfiguration
export-cslisconfiguration
Get-CSVoicePolicy
Get-CSDialPlan

############ Loads funcion to Zip up XML files #############################

# Loads funcion to Zip up XML files
##		This script will purge old files, right now it is set for 10 days

$Now = Get-Date
$Days = "10"
$TargetFolder = "E:\masterbackup\Lync-Backups\BackupFiles\"
$Extension = "*.zip"
$LastWrite = $Now.AddDays(-$Days)
$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}
foreach ($File in $Files)
	    {
	    if ($File -ne $NULL)
	        {
	        Remove-Item $File.FullName | out-null
	        }
	    else
	        {
	        }
	    }
##		Create two Zip Files for backups
$filename = "E:\masterbackup\Lync-Backups\BackupFiles\{0:yyyy.MM.dd-HH.mm}-CSconfig.zip" -f (Get-Date)
$filename1 = "E:\masterbackup\Lync-Backups\BackupFiles\{0:yyyy.MM.dd-HH.mm}-LISconfig.zip" -f (Get-Date)
$filename2 = "E:\masterbackup\Lync-Backups\BackupFiles\{0:yyyy.MM.dd-HH.mm}-Rgsconfig.zip" -f (Get-Date)
$filename3 = "E:\masterbackup\Lync-Backups\BackupFiles\{0:yyyy.MM.dd-HH.mm}-CS.zip" -f (Get-Date)
##		Commands Run the Export Features
export-csconfiguration -Filename $filename -Force:$True
export-cslisconfiguration -Filename $filename1
#Export-CsRgsConfiguration  -Filename $filename2
Get-CSVoicePolicy | export-clixml –path E:\masterbackup\Lync-Backups\BackupFiles\VoicePolicy.xml
Get-CSDialPlan | export-clixml –path E:\masterbackup\Lync-Backups\BackupFiles\Dialplan.xml



##		Change Directories
Cd \
Cd \
cd E:
cd E:\masterbackup\Lync-Backups\BackupFiles
##		Create Zip file to move XML's
new-zip $filename3
PING 127.0.0.1 -n 10
dir .\DBImpExp.xml | copy-toZip -zipfile $filename3
PING 127.0.0.1 -n 10
dir .\VoicePolicy.xml | copy-toZip -zipfile $filename3
PING 127.0.0.1 -n 5
dir .\Dialplan.xml | copy-toZip -zipfile $filename3
PING 127.0.0.1 -n 5
Del *.xml




When the Runbook has completed you should have several Zip files you Configurations files.








Monday, January 13, 2014

Nagios & Ntop

Old Project:
Nagios Monitoring:


Below is a listing of Switch\Routers\AP's.
SNMP Traps Send status of devices



Diagram of how each device is connected to core Data Center.


Using MRTG you can chart usage.



 NTOP

network traffic probe, this was monitoring traffic on the MPLS between sites


With the monitoring you can filter bases on Port Traffic




Wednesday, January 8, 2014

DNS Failover Project

DNS Failover Project
Scope: One internet circuit fails dns records failover to back up circuit.
Technology IP anycast
Company DNS Made Easy

Summary;

Moved name servers for Contoso to DNS Made Easy. Configured DNS entries for failover between to IP Addresses.

Screenshot of DNS Failover Configuration. (Note company info has been changed.)

Test:
When Location 1 fails the following email is sent:
Notification: System is DOWN
IP: 8.8.8.8
System Desc: Test
Port: 80
Protocol: HTTP
2013-12-28 04:39:15.177 UTC
Previously failed: 7 times.
ID: 12124184
When the Location is has been restored the following email is sent:

Notification: System is UP
IP: 8.8.8.8
System Desc: Test
Port: 80
Protocol: HTTP
2013-12-28 04:39:15.177 UTC
Previously failed: 7 times.
ID: 12124184




Conclusion:
This Solution seems to be working fine for us, only issue we have seen is when the internet circuit flaps. To mitigate this we log into Easy DNS and disable the failover and disable the circuit on the firewall.

This scenario has only effected our production environment once since go live.