16. Juni 2011

RoundTable Firmware Upgrade

Microsoft hat eine neue Firmware für das RoundTable herausgegeben:

http://support.microsoft.com/kb/2559123 

Der Update erfolgt durch einen PC der an das RT angeschlossen wird und die Firmware via USB mit dem RTManage.exe Tool überträgt, oder via Software Update Service des OCS Serves. Details zum Aktualisieren des Roundtable findet man hier.

Folgende Probleme werden dadurch behoben:

945609  A RoundTable device may unexpectedly stop processing audio

945610  The power frequency of the VDSP is not reported in a RoundTable log file

945611  The firmware on a RoundTable device may incorrectly resolve an error code when the image on the RoundTable device is updated

945619  Exception when you perform stress test by using Microsoft RoundTable

945664  A computer may not recognize Microsoft RoundTable

945665  The firmware in Microsoft RoundTable may not correctly wake up the base when you plug in a USB dial pad

945666  Video may flicker when you use Microsoft RoundTable

945667  When you restart Microsoft RoundTable after you perform an Enterprise Image Update, the computer may not restart correctly

945668  The time setting in Microsoft RoundTable is incorrect

945670  An entry is deleted when you release the Delete button instead of when you press the Delete button on the Microsoft RoundTable firmware device

945671  Microsoft RoundTable does not clear previously-entered digits when you select a telephone number from the speed dial list

945672 When you use Microsoft RoundTable to record multichannel audio, the audio file has lots of echo

942334  Description of the Microsoft RoundTable firmware hotfix package: September 14, 2007

10. Juni 2011

Virtuelle Testumgebung für Lync

Microsoft hat gestern eine virtuelle Testumgebung für Microsoft Lync als Download zur Verfügung gestellt. Die Umgebung beinhaltet alle wichtigen Komponenten um Lync einmal komplett und ohne Einfluss auf die eigene Infrastruktur zu testen.

Auf Basis von Hyper-V VMs kann man so das Zusammenspiel von Lync, Exchange und SharePoint ausprobieren.

VHD Test Drive - Lync Server 2010 VHD

Neue OCS 2007 R2 Hotfixes

 

Microsoft hat für Office Communication Server 2007 R2 Group Chat und den Communicator herausgegeben. Es handelt sich um kumulative Updates.

Produkt Artikel Download Link
Office Communicator 2007 R2 2549042

MS download

Office Communications Server 2007 R2
Group Chat Server
2549044 MS download
Office Communications Server 2007 R2
Group Chat-Client
2549043 MS download
Office Communications Server 2007 R2
Group Chat Admin Tool
2502323 MS download
Microsoft Office Communications Server 2007 R2 Group Chat Add ins API Dokumentation 2549044 MS download
New Features in the Update for Office Communications Server 2007 R2 Group Chat 2549044 MS download

8. Juni 2011

Powershell Script zum Backup eines Lync Servers

Wie bereits letzte Woche angekündigt habe ich nun endlich mein Backup Script für Lync in der Version 1.0 fertiggestellt.

Es sichert alle wichtigen Einstellungen und Dateien um im Katastrophenfall auch einen Lync Server wiederherstellen zu können.

Das Script steht hier zum Download bereit.

Damit das Script auf dem Lync Server laufen kann, muss evtl. die Execution Policy for Scripte geändert werden:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Code des Lync Backup Scriptes.


###################################################################################
## Script Version: 1.0
###################################################################################
## This Scripts collects important data from your Lync environment and
## stores it in files to a Backup path. With this data you should be able
## to recover from a desaster issue in your lync environment.
## Currently this script should be run on at every Frontend Server.
## I do not warrant any functionalty or completeness on this script. 
## You run it on your own risk and it does not replace proper backups 
## and system management!
## I do not collect data for the following roles:
## Group Chat, Monitoring, Archiving, XMPP, EDGE
## 
## Credits to Adrian, Dough, Kevin, Nick, Scott, Vincent
## for helping me and inspiring me on this script
##
## ChangeLog: -
##
## Open Topics:
## - powershell remoting to other Lync servers
## - Edge Server Backup (Network, Routes, Host file, Certificates, RootCertificates)
####################################################################################
 
#Please specify your backup folder here
$BackupPath = "C:\Backup"
 
#Specify if you want to export Certificates with private Keys, 
#needs Admin Rights and may be a security risk!
$ExportCert = $true
# Passphrase Secret for exported Certificate PFX
$SecretForPFX = "geheim"
 
#-----------------------------------------------------------------------------
 
# Funktion to test if Modules are abvailable
Function Get-MyModule { 
    Param([string]$name) 
    if(-not(Get-Module -name $name)) 
    { if(Get-Module -ListAvailable | Where-Object { $_.name -eq $name }) 
    { Import-Module -Name $name 
    Write-Host "`nModule for $name was loaded!" } 
    else { Write-Host -BackgroundColor DarkRed "`nModule for $name was not loaded!" }
    } # end if not module 
    else {Write-Host "`nModule for $name was already loaded!" } 
    }
Get-Mymodule -name "Lync"
 
#Build up Unique Foldername and create required path
$filepath = $BackupPath + "\{0:yyyyMMdd-HHmm}\" -f (Get-Date)
If(!(Test-Path -Path $BackupPath)) {New-Item $BackupPath -Type directory |Out-Null}
if(!(Test-Path -Path $filepath)) {New-Item $filepath -Type directory|Out-Null}
 
#Get basic topology data
Write-Host Exporting Basic Topology Data
Export-CSconfiguration -Force:$True -AsBytes | Set-Content -Encoding Byte ($filepath + "CSConfiguration.zip")
Export-CsLisConfiguration -AsBytes | Set-Content -Encoding Byte ($filepath + "CSLISConfiguration.zip")
Get-CsService |Export-Csv ($filepath + "Get-CsService.csv")
Get-CSTopology -asxml | out-file ($filepath + "CurrentTopology.tbxml")
(Get-CSSimpleUrlConfiguration).SimpleUrl | out-file ($filepath + "SimpleURLs.txt")
 
#Export User Data
Write-Host Exporting Users
Get-CsUser |Export-Csv ($filepath + "user.csv")
 
#Backup Filestores in Oganization including encrypted Meeting Data
$FileStores = Get-CsService -Filestore
foreach ($FileStore in $FileStores){
    Write-host Copying File from $FileStore.UncPath 
    #icacls $($FileStore.UncPath)\* /save ($filepath + "FileStore-ACLs.txt") /T
    robocopy $($FileStore.UncPath) $($filepath + $FileStore.ServiceId + "\") /NFL /NDL /NP /E /SEC /DCOPY:T /XF Meeting.Active
}
 
#Export Certificates w/ private Keys if exportable and requested above
get-cscertificate | Out-File ($filepath + "InstalledCertificates.txt")
If ($ExportCert) {
    dir cert:\LocalMachine\my |Where-Object { $_.hasPrivateKey } |Foreach-Object { [system.IO.file]::WriteAllBytes(    "$filepath\$($_.FriendlyName)-$($_.ThumbPrint).pfx",($_.Export('PFX', $SecretForPFX)))}
    Write-Host -BackgroundColor DarkGreen Certificates with PrivateKey were exported!
}
 
#Export ResponseGroup Configuration
$ApplicationServers = Get-CsService -ApplicationServer
If (Test-Path "C:\Program Files\Microsoft Lync Server 2010\ResKit\RgsImportExport.ps1") {
    Import-Module "C:\Program Files\Microsoft Lync Server 2010\ResKit\RgsImportExport.ps1"
    foreach ($ApplicationServer in $ApplicationServers){
    Write-Host Exporting ResponseGroup Configuration Data from $($ApplicationServer.Identity)
    Export-CsRgsConfiguration -Source $($ApplicationServer.Identity) -FileName ($filepath + $ApplicationServer.PoolFqdn +"-CsRgsConfiguration.zip") 
    }
}
 
#Export Conference Directories and Users Contacts and premissions
$ApplicationDatabases = Get-CsService -ApplicationDatabase
foreach ($ApplicationDatabase in $ApplicationDatabases){
Write-Host "Exporting User Data (Contacts, Conference) from" + $($ApplicationDatabase.Identity)
& 'C:\Program Files\Common Files\Microsoft Lync Server 2010\Support\DBImpExp.exe' /hrxmlfile:c:\file.xml /sqlserver:$($ApplicationDatabase.PoolFqdn + "\" +  $ApplicationDatabase.SqlInstanceName)
}
 
#Backup IIS Settings
Write-Host Running IIS Backup:
Invoke-Expression "C:\Windows\System32\inetsrv\appcmd.exe add backup"
$IISBackupPath = $($filepath + "IIS-Backup\")
New-Item $IISBackupPath -Type directory |Out-Null
foreach ($folder in Get-ChildItem C:\Windows\system32\inetsrv\backup) {
    #copy Backup from within the last 10 minutes
    if ($folder.CreationTime -gt ($(Get-Date).AddMinutes(-10))){
        Copy-Item $folder.FullName -destination $IISBackupPath -Recurse -ErrorAction SilentlyContinue
    }
}
 
#Backup some Network Configuration data from local server 
Write-Host "Backup some Network Configuration data from local server (hosts, Network Config)"
&ipconfig /all > $($filepath + "network-Settings.txt")
&route print >> $($filepath + "network-Settings.txt")
copy-item C:\Windows\System32\drivers\etc\hosts -destination ($filepath + "etc-hosts-file.txt") -ErrorAction SilentlyContinue
 
#SQL Backups on XDS,LIS,RTC,RTCAB,RGCCONFIG from RTC Instance
$SQLBackupFile = $($filepath + "Backup-LYNC-DBS.sql")
$SQLBackupPath = $($filepath + "SQL-Backup\")
New-Item $SQLBackupPath -Type directory |Out-Null
#First, build a Backup Script File
$DBs = "XDS", "LIS", "RTC", "RTCAB", "RGSCONFIG"
foreach ($DB in $DBs){
    $sqlstatement = "BACKUP DATABASE " + $DB + " TO DISK = '" + $SQLBackupPath + $DB + ".bak';"
    Add-Content -Path $sqlbackupfile  "$sqlstatement`n"
}
#Run SQL Backup with SQLCMD Tool
$CMSDatabase = Get-CsService -CentralManagementDatabase
Write-Host Backing SQL from $($CMSDatabase.PoolFqdn + "\" +  $CMSDatabase.SqlInstanceName)
& 'C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE' -S $($CMSDatabase.PoolFqdn + "\" +  $CMSDatabase.SqlInstanceName) -i $sqlbackupfile
Remove-Item -Path $sqlbackupfile
Write-Host "`nBackup run has finished! "
Write-Host "You may backup your files from $filepath to tape!"

3. Juni 2011

Lync Ressource Kit Buch

Nach dem in der Vergangenheit einzelne Kapitel bereits veröffentlicht wurden, ist nun das gesamte Buch als technische Referenz für Microsoft Lync verfügbar.

Seit gestern ist es von dem Technet downloadbar.

Jeder der etwas tiefer in die Funktionalitäten und Zusammenhänge von Lync einsteigen will, sollte sich dieses Werk genauer ansehen.

1. Juni 2011

Backup eines Lync Servers

Der Lync Server speichert einen Großteil seiner Einstellungen und Konfigurationen  in seinen Datenbanken auf dem SQL Server. Es werden aber auch Daten als Dateien im Dateisystem und dem Betriebssystem abgelegt.  Dieser Artikel wird sich damit beschäftigen welche wichtige Daten man regelmäßig sichern sollte um sie in einem Katastrophenfall parat zu haben. Die Group Chat Rolle wird hier nicht berücksichtigt!

Datenbanken

Fangen wir mit den Datenbanken auf dem SQL Server an:

image

Wichtig sind hier natürlich alle Topologieinformationen aus dem CMS. Diese sind in der XDS.mdf Datenbank gespeichert. Der “Topology Builder” schreibt seine Daten in diese Datenbank, die dann auf alle anderen Server verteilt wird. Als zweites müssen die Daten aus der RGSConfig.mdf Datebank gesichert werden. Hier sind alle Einstellungen zu Response Groups Agents, den Warteschlangen (queues) und den Workflows gespeichert.

Als dritte Datenbank müssen wir ggf. die Lis.mdf Datenbank sichern. Hierin sind die “Location Information”-Daten des Lync Servers für die E9-1-1 Notruffunktionalitäten und die Netzwerkinformationen gespeichert. Wer diese E9-1-1 nicht nutzt und keine IP-Netzwerkdaten in Lync Importiert hat, braucht diese Datenbank nicht zu sichern.

Diese drei Datenbanken liegen bei einem Standard Edition Server lokal mit auf dem Server in der RTC Instanz der SQL Express Datenbank. Hier ist es einfach den Ort zu bestimmen. In einem großen Umfeld, in dem auch Enterprise Edition Server zum Einsatz kommen, werden separate SQL Server verwendet. Der erste Lync Server der installiert wurde, bekommt somit auch die CMS Rolle zugesprochen, und speichert diese in seinem zugeordneten SQL Server.

Datenbanken die den Suffix dyn im Namen tragen, enthalten nur dynamische Informationen, die nicht kritisch sind und nicht gesichert werden brauchen aber können.

Wenn man herausfinden möchte, wer aktuell die CMS Rolle verwaltet und auf welchem Server die Datenbanken gespeichert sind, kann dies mit der Lync Powershell abfragen:

Get-CsService -CentralManagement

Identity : CentralManagement:fe1.uccloud.net
FileStore : FileStore:fe1.uccloud.net
CentralManagementDatabase : CentralManagementDatabase:fe1.uccloud.net
DependentServiceList : {}
ServiceId : 1-CentralMgmt-1
SiteId : Site:MainSiteOffenbach
PoolFqdn : fe1.uccloud.net
Version : 5
Role : CentralManagement




Hier sieht man die Central Management Rolle wird vom Server fe1.ucclooud.net verwaltet. Eine andere Installation hat folgende Daten:

Get-CsService -CentralManagement

Identity : CentralManagement:eepool01.testlab.net
FileStore : FileStore:filesrv52.testlab.net
CentralManagementDatabase : CentralManagementDatabase:sqlclu12.testlab.net
DependentServiceList : {}
ServiceId : 1-CentralMgmt-1
SiteId : Site:MainSiteFrankfurt
PoolFqdn : eepool01.testlab.net
Version : 5
Role : CentralManagement



Her sieht man besser, dass die SQL Datenbank auf einem eigenen SQL Server (sqlclu12.testlab.net) gespeichert ist. Wenn man wissen will, ob die Datenbank in einer eigenen Instanz des SQL Serves läuft, benötigen wir ein weiteres Powershell cmdlet:

Get-CsConfigurationStoreLocation
sqlclu12.testlab.net\LYNC



Hier sehen wir also das die CMS Datenbank auf dem Server sqlclu12 in einer eigenen SQL-Instanz mit Namen LYNC läuft.


Diese Instanz sollte auf unbedingt in das SQL-Backup aufgenommen werden und regelmäßig gesichert werden.


Wird auch noch ein Monitoring oder Archiving Server eingesetzt, sollten auch diese Daten gesichert werden. Hier kann man einfach auf ein SQL Backup setzen und die Daten wegsichern. Für den Betrieb von Lync sind diese Daten nicht notwendig und können im Katastrophenfall als letztes wiederhergestellt werden.


Dateifreigaben (Fileshares)


Lync speichert weitere Einstellungen und Daten in seinem FilleStore. Auch hier gibt uns ein Powershell cmdlet mehr Details preis.

PS C:\> Get-CsService -FileStore

Identity : FileStore:fe1.uccloud.net
ShareName : Lync
UncPath : \\fe1.uccloud.net\Lync
DependentServiceList : {WebServer:fe1.uccloud.net, ConferencingServer:fe1.ucclo
ud.net, ApplicationServer:fe1.uccloud.net, CentralManage
ment:fe1.uccloud.net}
ServiceId : 1-FileStore-1
SiteId : Site:MainSiteOffenbach
PoolFqdn : fe1.uccloud.net
Version : 5
Role : FileStore


Identity : FileStore:file.uccloud.net
ShareName : lync
UncPath : \\file.uccloud.net\lync
DependentServiceList : {WebServer:frapool01.uccloud.net, ConferencingServer:fra
pool01.uccloud.net, ApplicationServer:frapool01.uccloud.
net}
ServiceId : 3-FileStore-1
SiteId : Site:MainSiteFrankfurt
PoolFqdn : file.uccloud.net
Version : 5
Role : FileStore



Des existieren hier also zwei Lync Server mit eigenen File Shares: “\\file.uccloud.net\lync” und “\\fe1.uccloud.net\Lync“. Beide Shares sollten in die Datensicherung auf Dateiebene aufgenommen werden! Alternativ kann man sie auch per Robocopy und den Optionen “/E /SEC /DCOPY:T /XF Meeting.Active”  an einen anderen Ort sichern.


Betriebssystem


Lync nutzt stark Komponenten des Betriebssystems. So ist es naheliegend auch hier alle wichtigen OS Einstellungen zu sichern. Hierrunter fallen:



  • Netzwerkkonfiguration (IP Adressen, Routen, hosts Datei etc.)

  • IIS Einstellungen

  • Zertifikate

Lync Einstellungen und Applikationen


Lync selbst liefert ein eigenes Powershell cmdlet mit, dass alle Topologiedaten, Richtlinien (Policies) und weitere Einstellungen in eine XML Datei sichert.

Export-CsConfiguration –FileName "C:\Backup\Backup.zip"





Für die Location Information Daten gibt es ein ähnliches cmdlet:

Export-CsLisConfiguration -FileName "C:\Backup\E911Config.zip"



Für die “Response Group”-Einstellungen hat Microsoft im Lync Resource Kit ein separates cmdlet zur Verfügung gestellt. Man muss es importieren und kann es dann in Powershell benutzen.

Import-Module .\RgsImportExport.ps1
Export-CsRgsConfiguration ApplicationServer:frapool01.uccloud.net -FileName "C:\Backup\RgsConfig.zip"



Benutzerdaten


Die Benutzerdaten, wie z.B. Kontakte und geplante Konferenzen sind in den Backend-Datenbanken der Lync Server gespeichert. Auch hier gibt es wieder ein Resource Kit Tool.

C:\Program Files\Common Files\Microsoft Lync Server 2010\Support\Dbimpexp.exe /hrxmlfile:D:\BackupUser.xml /sqlserver:sql01.uccloud.net\rtc



Alle diese einzelnen Schritte (ohne das SQL Backup)  habe ich in einem PowerShell Script zusammengefasst, das ich in einem separaten Post veröffentlichen werde.