OnPrem Lync/Skype and Office 365

Had an issue with mailboxes migrated to Office 365 while using OnPrem Lync/Skype.

Lync showed a constant “Enter Credentials” dialog:

LyncEnterCredentials

The KB appears to have fixed it: Office 2013 and Lync 2013 periodically prompt for credentials to SharePoint Online, OneDrive, and Lync Online

A simple registry key that you can rollout with a GPO.

#Lync Integration with #BlackBerry

So I have a need to integrate Lync with BlackBerry.  So I followed this wicked guide http://talesfromc.blogspot.co.uk/2011/04/lync-bes-503-integration.html?m=1 and all was shweet.  I had to make a few tweeks to the certificate request inf file, as the SAN names just didn’t want to add themselves to the certificate request:

[Version]
Signature=”$Windows NT$”

[NewRequest]
Subject = “CN=LyncFEPool.domain”
Exportable = TRUE
KeyLength = 1024
KeySpec = 1
KeyUsage = 0xA0
MachineKeySet = True
FriendlyName = “OCSConnector”
ProviderName = “Microsoft RSA SChannel Cryptographic Provider”
ProviderType = 12
RequestType=pkcs10

[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.1
OID=1.3.6.1.5.5.7.3.2

[Extensions]
2.5.29.17 = “{text}”
_continue_= “DNS=PrimaryBES.domain&”
_continue_= “DNS=StandbyBES.domain&”
_continue_= “DNS=LyncFEPool.domain”

Then run certreq -new c:\LyncRequest.inf c:\LyncCertNew.req and request the cert, then import it blah, blah.

However, I have an Active/Passive BlackBerry setup and when I failed over to the Passive node, Lync didn’t work from my device.

The BlackBerry Collaboration Service would start and then stop with 3 Error events in the application event log:

Source:        BlackBerry Collaboration Service
Event ID:      15000
Level:         Error
Description:
<2013-04-12 12:12:44.910 BST>:[126]:<BBIM_EMDC2BEM01_BBIM_1>:<ERROR>:<LAYER = BBIM, [OCSC] TlsFailureException: The operation failed due to issues with Tls. See the exception for more information., ErrorCode=-2146893042, FailureReason = Other, InnerExceptionCertificateInfoNative::AcquireCredentialsHandle() failed; HRESULT=-2146893042>

Source:        BlackBerry Collaboration Service
Event ID:      15000
Level:         Error
Description:
<2013-04-12 12:12:44.910 BST>:[127]:<BBIM_EMDC2BEM01_BBIM_1>:<ERROR>:<LAYER = BBIM, [OCSC] TlsFailureException: The operation failed due to issues with Tls. See the exception for more information., ErrorCode=-2146893042, FailureReason = Other, InnerExceptionCertificateInfoNative::AcquireCredentialsHandle() failed; HRESULT=-2146893042>

Source:        BlackBerry Collaboration Service
Event ID:      15000
Level:         Error
Description:
<2013-04-12 12:12:44.925 BST>:[130]:<BBIM_EMDC2BEM01_BBIM_1>:<ERROR>:<LAYER = BBIM, [OCSC] BlackBerry OCSConnector will terminate…>

Turns out that you can’t use the initial cert you created, you have to export it with the public key to a .pfx file.  Then import that on to the Standby BES.

Everyday is a school day!

 

Get-LyncServer v1.3

#Powershell, #Lync

Wow feedback .. thanks mike for the observation on the vertical text.  Have updated it to do it a different way, so let me know what you think.

You can download it here or cut and paste below

<#
  .NOTES
  NAME: Get-LyncServer.ps1
  AUTHOR: Paul Flaherty
  Last Edit: "v1.3 [28 February 2012]

  v1.0 08 Feb 2012 : A script it born
  v1.1 20 Feb 2012 : Change Services to *RTC* instead of RTC*
  v1.2 21 Feb 2012 : Added Lync Server version
  v1.3 28 Feb 2012 : Updated HTML TH style

  .LINK
  blogs.flaphead.com

  .SYNOPSIS
  This Script gets connectes to a Lync Server and enumerates a list
  of all OCS/Lync Servers and gathers additional information.
.DESCRIPTION
  This script will connect to a Lync Server using the /OcsPowershell URI.
  Once connected it will use Get-CsComputer to get a list of OCS/Lync related servers.
  Then it uses Get-CsService to get a list of Lync Services and the Lync related
  windows services.

  The script then creates a matrix of the data an output a CSV file and HTML web Page
.OUTPUTS
  Get-LyncServer.html
  Get-LyncServer.csv
.EXAMPLE
  Get-LyncServer.ps1
  This will prompt you for Credentials and search the AD for a lync server to use
.EXAMPLE
  Get-LyncServer.ps1 -LyncServer myLyncServer01
  This will prompt you for Credentials and use the specified lync server.
  it will also add the default ad domain to the server name is missing
.EXAMPLE
  Get-LyncServer.ps1 -CredentialsFile .creds.txt
  This will search the AD for a lync server to use and use the current user account and
  credentials store in the CredentialsFile as the password
.EXAMPLE
  Get-LyncServer.ps1 -CredentialsFile .creds.txt -LyncServer myLyncServer01
  This will use the specified lync server and use the current user account and
  credentials store in the CredentialsFile as the password
  .PARAMETER LyncServer
  Netbios or FQDN of a lync server to use.
  If the Netbios name is used, the AD Domain DNS name will be appended
  .PARAMETER CredentialsFile
  Credentials Password file for the current logged on user.
  To Create the credentials file run:
  $creds = Get-Credential
  $creds.Password  | ConvertFrom-SecureString | Set-Content creds.txt

#>
##########################################################################################
PARAM([String]$LyncServer="", [String]$CredentialsFile="")

$AppName                = "Get-LyncServer.ps1"
$AppVer                 = "v1.3 [28 February 2012]"
$errorPref              = $errorActionPreference
$errorActionPreference  = "SilentlyContinue"
$ServerName             = hostname
$Today                  = Get-Date
$Global:CurrentUser     = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$Global:CurrentUserName = $Global:CurrentUser.Name
$xUser                  = $Global:CurrentUserName
$currentdom             = [System.DirectoryServices.ActiveDirectory.Domain]::getcurrentdomain()
$Forest                 = $currentdom.Forest.ToString()
$ForestDomain           = $Forest
$xHTMLoutFolder         = "E:PsMon.LyncHTML"

##########################################################################################
#Display script name and version
#########################################################################################
Write-host " " $AppName -NoNewLine -foregroundcolor Green
Write-Host ": " $AppVer -foregroundcolor Green
Write-host "`n Run on $ServerName at $Today by $xUser" -foregroundcolor Yellow
Write-Host "|——————————————————————-|`n"
##########################################################################################
#Load the Lync bits & bobs
#########################################################################################
If($CredentialsFile -eq "") {
  $creds = Get-Credential -Credential $xUser
}ELSE{
  Write-Host "Using Credentials for " -NoNewLine
  Write-Host $xUser -NoNewLine -ForeGroundColor Yellow
  Write-Host " and password from " -NoNewLine
  Write-Host $CredentialsFile -ForeGroundColor Yellow

  $password = Get-Content $CredentialsFile | ConvertTo-SecureString
  $creds = New-Object System.Management.Automation.PsCredential $xUser,$password
} #$CredentialsFile

If($LyncServer -eq ""){
  Write-Host "Looking in RTCHSUniversalServices for a Lync Server"
  $Forest              = $Forest.Replace(".", ",DC=")
  $Forest              = "DC=" + $Forest
  $Dom                 = "LDAP://"
  $Dom                += $Forest
  $Root                = New-Object DirectoryServices.DirectoryEntry $Dom
  $Filter              = "(&(ObjectCategory=group)(name=*RTCHSUniversalServices*))"
  $selector            =
New-Object DirectoryServices.DirectorySearcher $Filter
  $selector.PageSize   = 1000
  $selector.SearchRoot = $root
  $objs                = $selector.findall()
  $tmpGroup            = $objs | Select Path -First 1
  $Group               = [ADSI]$tmpGroup.Path
  $GrpMembers          = $Group.Member
  $grpCnt              = $GrpMembers.Count
  Write-Host "Found Group.  It has " -NoNewLine
  Write-Host  $GrpCnt -NoNewLine -ForeGroundColor Green
  Write-Host " Members"

  $LyncServerList = @()
  ForEach($tmpMember in $GrpMembers){
    $tmpADSI = "LDAP://" + $tmpMember
    $tmpA    = [ADSI]$tmpADSI
    If($tmpA.objectClass -contains "computer"){$LyncServerList += $tmpA.Name}
  }

  $LyncServerList = $LyncServerList | Sort
  $tmpNumber = Get-Random -Minimum 0 -Maximum $LyncServerList.Count
  $LyncServer = $LyncServerList[$tmpNumber]
  $LyncServer = $LyncServer + "." + $ForestDomain
  $LyncConnectionURI = "
https://" + $LyncServer + "/OcsPowershell" 

 

}ELSE{
  IF($LyncServer.Contains(".") -eq $False){$LyncServer = $LyncServer + "." + $ForestDomain}
  $LyncConnectionURI = "
https://" + $LyncServer + "/OcsPowershell"
}

Write-Host "`nConnecting to:"$LyncConnectionURI
$s=New-PSSession -ConnectionURI $LyncConnectionURI -Credential $creds
If ($s -eq $Null){
  Write-Host "Error connecting to Lync" -Foregroundcolor Red
  Write-Host "Exiting" -Foregroundcolor Yellow
  Exit
}
Import-PSSession $s

$arrObjects = @()
$LyncRoleLabels = @()
$LyncRoleLabels += "Computer", "Pool", "Site", "ProductVersion", "DeploymentType", "OS", "RAM","UpToDate"

Write-Host "`nGetting Lync Servers`t" -NoNewLine
$LyncServers  = Get-CsComputer | Sort Identity
Write-host $LyncServers.Count"`n" -ForeGroundColor Green

Write-Host "Get-CsService`t" -NoNewLine
$LyncService  = Get-CsService
Write-Host $LyncService.count "Services found" -ForeGroundColor Green

Write-Host "`nGetting Windows Services"
$LyncWindowsServices = @()
ForEach($item in $LyncServers){
  $n = $item.Identity
  Write-Host $n"`t" -NoNewLine
  $tmpLWS = @()
  $tmpLWS = Get-Service *RTC* -ComputerName $n #| select @{Expression={($_.DisplayName).Replace(" ","")};Label="DisplayName"}, Status
  Write-Host $tmpLWS.count -ForeGroundColor Green
  $LyncWindowsServices += $tmpLWS

 
}
Write-host "Total Services Found"$LyncWindowsServices.count

$LyncWindowsServicesByServer = $LyncWindowsServices | Group MachineName

#Get Available Roles
Write-host "`nGetting Lync Server Roles"

$LyncRoles = $LyncService | group Role | sort name
ForEach($tmpRole in $LyncRoles){$LyncRoleLabels += $tmpRole.Name}
$LyncServiceByPool = $LyncService | Group PoolFqdn | Sort Name

#Get Available Services
$grpLyncWindowsServices = $LyncWindowsServices | Group DisplayName
$grpLyncWindowsServices | ForEach{$n = $_.name; $LyncRoleLabels += $n}

Write-Host "`nMatrix Label Count" $LyncRoleLabels.count
Write-Debug $LyncRoleLabels

Write-Host "`nBuilding Matrix"
ForEach($tmpServer in $LyncServers){
  $tmpLyncServerId = $tmpServer.Identity
  Write-Host $tmpLyncServerId
  $objSite = Get-CsPool -Identity $tmpServer.pool | Select-Object Site
  $objReplication = $Null
  $objReplication = Get-CsManagementStoreReplicationStatus -ReplicaFqdn $tmpLyncServerId | Select-Object UpToDate
  $strReplication = $objSite.site -replace("Site:","")
  $tmpOS          = Get-WmiObject win32_operatingsystem -ComputerName $tmpLyncServerId

  $key="SOFTWAREMicrosoftReal-Time Communications"
  $type = [Microsoft.Win32.RegistryHive]::LocalMachine
  $regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $tmpLyncServerId)
  $regKey = $regKey.OpenSubKey($key, $True)
  $tmpLabel = $regKey.GetValueNames()
  $tmpVC = "" | Select $tmpLabel
  ForEach($vc in $regKey.GetValueNames()){$tmpVC.$vc = $regkey.GetValue($vc)}

  $tmpLyncServer = "" | Select $LyncRoleLabels
  $tmpLyncServer.Computer = $tmpLyncServerId
  $tmpLyncServer.Pool     = $tmpServer.Pool
  $tmpLyncServer.Site     = $strReplication
  $tmpLyncServer.UpToDate = $objReplication.UpToDate
  $tmpLyncServer.OS       = $tmpOS.Caption + " " + $tmpOS.CSDVersion
  $tmpLyncServer.RAM      = "!AR!" + $tmpOS.FreePhysicalMemory
  $tmpLyncServer.ProductVersion = $tmpVC.ProductVersion
  $tmpLyncServer.DeploymentType = $tmpVC.DeploymentType

  $tmpLSbP = $LyncServiceByPool | Where {$_
.Name -eq $tmpLyncServerId}
  ForEach($item in $tmpLSbP){
    $tmpG = $item.Group
    ForEach($itemG in $tmpG){
      $xRole = $itemG.Role
      $tmpLyncServer.$xRole = $True
    }
  }

  $tmpWinSvc = $LyncWindowsServicesByServer | Where {$_.Name -eq $tmpLyncServerId}
  ForEach($item in $tmpWinSvc){
    $tmpG = $item.Group
    Write-Host $tmpG.count  
    ForEach($itemG in $tmpG){
      $xSvc = $itemG.DisplayName
      Write-Host $xSvc
      $tmpLyncServer.$xSvc = "svc"
    }
  }

  $arrObjects += $tmpLyncServer
}

$HtmlHeader = "
<Style>
  TABLE{border-width: 1px;
        padding: 1px;
        border-style: solid;
        border-color: black;
        border-collapse: collapse;}
  TD{border-width: 1px;
     padding: 1px;
     border-style: solid;
     border-color: black;}
  TH{font-family:’Arial’;
     font-size:12px;
     border-width: 1px;
     padding: 1px;
     border-style: solid;
     border-color: black;
     background-color:peachpuff;
     white-space: nowrap;
     writing-mode:tb-rl;
     filter: flipv fliph;
     Text-align:left}
  TR{font-family:’Arial’;
     font-size:10px}
  P{font-family:’Arial’;}
</Style>
<TITLE>LYNC SERVERS</TITLE>"

$z="<B><FONT size=’2′ face=’VERDANA’>Lync Servers</B></FONT><BR><FONT size=’1′ face=’VERDANA’>Last updated: $today</FONT></font><HR size=6 color=Green>"
$xHTML = $arrObjects | ConvertTo-Html -head $HtmlHeader -Title "Lync Server Info" -body $z

$txtYELLOW = @()
$txtAR     = @()
$i=0; $xHTML | foreach{IF ($_ -like "*<td>True*"){ $txtYellow += $i}; $i++}
$txtYELLOW | ForEach{$xHTML[$_] = $xHTML[$_].Replace("<td>True","<td bgcolor=ORANGE>True")}

$txtYELLOW = @()
$i=0; $xHTML | foreach{IF ($_ -like "*<td>svc*"){ $txtYellow += $i}; $i++}
$txtYELLOW | ForEach{$xHTML[$_] = $xHTML[$_].Replace("<td>svc","<td bgcolor=ORANGE>svc")}

$i=0; $xHTML | foreach{IF ($_ -like "*>!AR!*"){ $txtAR += $i;}; $i++}
$txtAR | ForEach{$xHTML[$_] = $xHTML[$_].Replace(">!AR!"," align=right>")}

$xEnd = get-Date
$xHTML += "
<HR size=6 color=Green>
<FONT size=’1′ face=’VERDANA’>Script Completed: $xEnd</FONT>
</FONT><BR></BODY>
</HTML>
"

$arrObjects | ForEach{$_.RAM = $_.RAM.Replace("!AR!","")}
$xHTML      | out-file $xHTMLoutFolderGet-LyncServer.html
$arrObjects | Export-csv Get-LyncServer.csv -NoTypeInformation

Get-PSSession | ForEach{Remove-PSSession -id $_.id}
$errorActionPreference = $errorPref
#End
##########################################################################################

Get-LyncServer v1.2

#Powershell, #Lync

Okay so made some updates to include Lync/OCS version, Lync Type, OS and Memory.  Also change the services from RTC* to *RTC*

Downloadable from here or cut and paste below .. enjoy

<#
  .NOTES
  NAME: Get-LyncServer.ps1
  AUTHOR: Paul Flaherty
  Last Edit: "v1.2 [21 February 2012]
  .LINK
  blogs.flaphead.com
  .SYNOPSIS
  This Script gets connectes to a Lync Server and enumerates a list
  of all OCS/Lync Servers and gathers additional information.
 .DESCRIPTION
  This script will connect to a Lync Server using the /OcsPowershell URI.
  Once connected it will use Get-CsComputer to get a list of OCS/Lync related servers.
  Then it uses Get-CsService to get a list of Lync Services and the Lync related
  windows services.

  The script then creates a matrix of the data an output a CSV file and HTML web Page
 .OUTPUTS
  Get-LyncServer.html
  Get-LyncServer.csv
 .EXAMPLE
  Get-LyncServer.ps1
  This will prompt you for Credentials and search the AD for a lync server to use
 .EXAMPLE
  Get-LyncServer.ps1 -LyncServer myLyncServer01
  This will prompt you for Credentials and use the specified lync server.
  it will also add the default ad domain to the server name is missing
 .EXAMPLE
  Get-LyncServer.ps1 -CredentialsFile .creds.txt
  This will search the AD for a lync server to use and use the current user account and
  credentials store in the CredentialsFile as the password
 .EXAMPLE
  Get-LyncServer.ps1 -CredentialsFile .creds.txt -LyncServer myLyncServer01
  This will use the specified lync server and use the current user account and
  credentials store in the CredentialsFile as the password
  .PARAMETER LyncServer
  Netbios or FQDN of a lync server to use.
  If the Netbios name is used, the AD Domain DNS name will be appended
  .PARAMETER CredentialsFile
  Credentials Password file for the current logged on user.
  To Create the credentials file run:
  $creds = Get-Credential
  $creds.Password  | ConvertFrom-SecureString | Set-Content creds.txt

#>

PARAM([String]$LyncServer="", [String]$CredentialsFile="")
##########################################################################################
$AppName = "Get-LyncServer.ps1"
$AppVer  = "v1.0 [13 February 2012]"
#v1.0 08 Feb 2012 : A script it born
#v1.1 20 Feb 2012 : Change Services to *RTC* instead of RTC*
#v1.2 21 Feb 2012 : Added Lync Server version
#
# This script gets a list of Lync Servers
#
#Written By Paul Flaherty
#blogs.flaphead.com
##########################################################################################
$errorPref = $errorActionPreference
$errorActionPreference = "SilentlyContinue"

$ServerName             = hostname
$Today                  = Get-Date
$Global:CurrentUser     = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$Global:CurrentUserName	= $Global:CurrentUser.Name
$xUser                  = $Global:CurrentUserName
$currentdom             = [System.DirectoryServices.ActiveDirectory.Domain]::getcurrentdomain()
$Forest                 = $currentdom.Forest.ToString()
$ForestDomain           = $Forest

$xHTMLoutFolder         = "E:PsMon.LyncHTML"

##########################################################################################
#Display script name and version
#########################################################################################
Write-host " " $AppName -NoNewLine -foregroundcolor Green
Write-Host ": " $AppVer -foregroundcolor Green
Write-host "`n Run on $ServerName at $Today by $xUser" -foregroundcolor Yellow
Write-Host "|-------------------------------------------------------------------|`n"
##########################################################################################
#Load the Lync bits & bobs
#########################################################################################
If($CredentialsFile -eq "") {
  $creds = Get-Credential -Credential $xUser
}ELSE{
  Write-Host "Using Credentials for " -NoNewLine
  Write-Host $xUser -NoNewLine -ForeGroundColor Yellow
  Write-Host " and password from " -NoNewLine
  Write-Host $CredentialsFile -ForeGroundColor Yellow

  $password = Get-Content $CredentialsFile | ConvertTo-SecureString
  $creds = New-Object System.Management.Automation.PsCredential $xUser,$password
} #$CredentialsFile

If($LyncServer -eq ""){
  Write-Host "Looking in RTCHSUniversalServices for a Lync Server"
  $Forest              = $Forest.Replace(".", ",DC=")
  $Forest              = "DC=" + $Forest
  $Dom                 = "LDAP://"
  $Dom                += $Forest
  $Root                = New-Object DirectoryServices.DirectoryEntry $Dom
  $Filter              = "(&(ObjectCategory=group)(name=*RTCHSUniversalServices*))"
  $selector            = New-Object DirectoryServices.DirectorySearcher $Filter
  $selector.PageSize   = 1000
  $selector.SearchRoot = $root
  $objs                = $selector.findall()
  $tmpGroup            = $objs | Select Path -First 1
  $Group               = [ADSI]$tmpGroup.Path
  $GrpMembers          = $Group.Member
  $grpCnt              = $GrpMembers.Count
  Write-Host "Found Group.  It has " -NoNewLine
  Write-Host  $GrpCnt -NoNewLine -ForeGroundColor Green
  Write-Host " Members"

  $LyncServerList = @()
  ForEach($tmpMember in $GrpMembers){
    $tmpADSI = "LDAP://" + $tmpMember
    $tmpA    = [ADSI]$tmpADSI
    If($tmpA.objectClass -contains "computer"){$LyncServerList += $tmpA.Name}
  }

  $LyncServerList = $LyncServerList | Sort
  $tmpNumber = Get-Random -Minimum 0 -Maximum $LyncServerList.Count
  $LyncServer = $LyncServerList[$tmpNumber]
  $LyncServer = $LyncServer + "." + $ForestDomain
  $LyncConnectionURI = "https://" + $LyncServer + "/OcsPowershell"



}ELSE{
  IF($LyncServer.Contains(".") -eq $False){$LyncServer = $LyncServer + "." + $ForestDomain}
  $LyncConnectionURI = "https://" + $LyncServer + "/OcsPowershell"
}

Write-Host "`nConnecting to:"$LyncConnectionURI
$s=New-PSSession -ConnectionURI $LyncConnectionURI -Credential $creds
If ($s -eq $Null){
  Write-Host "Error connecting to Lync" -Foregroundcolor Red
  Write-Host "Exiting" -Foregroundcolor Yellow
  Exit
}
Import-PSSession $s

$arrObjects = @()
$LyncRoleLabels = @()
$LyncRoleLabels += "Computer", "Pool", "Site", "ProductVersion", "DeploymentType", "OS", "RAM","UpToDate"

Write-Host "`nGetting Lync Servers`t" -NoNewLine
$LyncServers  = Get-CsComputer | Sort Identity
Write-host $LyncServers.Count"`n" -ForeGroundColor Green

Write-Host "Get-CsService`t" -NoNewLine
$LyncService  = Get-CsService
Write-Host $LyncService.count "Services found" -ForeGroundColor Green

Write-Host "`nGetting Windows Services"
$LyncWindowsServices = @()
ForEach($item in $LyncServers){
  $n = $item.Identity
  Write-Host $n"`t" -NoNewLine
  $tmpLWS = @()
  $tmpLWS = Get-Service *RTC* -ComputerName $n #| select @{Expression={($_.DisplayName).Replace(" ","")};Label="DisplayName"}, Status
  Write-Host $tmpLWS.count -ForeGroundColor Green
  $LyncWindowsServices += $tmpLWS


}
Write-host "Total Services Found"$LyncWindowsServices.count

$LyncWindowsServicesByServer = $LyncWindowsServices | Group MachineName

#Get Available Roles
Write-host "`nGetting Lync Server Roles"

$LyncRoles = $LyncService | group Role | sort name
ForEach($tmpRole in $LyncRoles){$LyncRoleLabels += $tmpRole.Name}
$LyncServiceByPool = $LyncService | Group PoolFqdn | Sort Name

#Get Available Services
$grpLyncWindowsServices = $LyncWindowsServices | Group DisplayName
$grpLyncWindowsServices | ForEach{$n = $_.name; $LyncRoleLabels += $n}

Write-Host "`nMatrix Label Count" $LyncRoleLabels.count
Write-Debug $LyncRoleLabels

Write-Host "`nBuilding Matrix"
ForEach($tmpServer in $LyncServers){
  $tmpLyncServerId = $tmpServer.Identity
  Write-Host $tmpLyncServerId
  $objSite = Get-CsPool -Identity $tmpServer.pool | Select-Object Site
  $objReplication = $Null
  $objReplication = Get-CsManagementStoreReplicationStatus -ReplicaFqdn $tmpLyncServerId | Select-Object UpToDate
  $strReplication = $objSite.site -replace("Site:","")
  $tmpOS          = Get-WmiObject win32_operatingsystem -ComputerName $tmpLyncServerId

  $key="SOFTWAREMicrosoftReal-Time Communications"
  $type = [Microsoft.Win32.RegistryHive]::LocalMachine
  $regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $tmpLyncServerId)
  $regKey = $regKey.OpenSubKey($key, $True)
  $tmpLabel = $regKey.GetValueNames()
  $tmpVC = "" | Select $tmpLabel
  ForEach($vc in $regKey.GetValueNames()){$tmpVC.$vc = $regkey.GetValue($vc)}


  $tmpLyncServer = "" | Select $LyncRoleLabels
  $tmpLyncServer.Computer = $tmpLyncServerId
  $tmpLyncServer.Pool     = $tmpServer.Pool
  $tmpLyncServer.Site     = $strReplication
  $tmpLyncServer.UpToDate = $objReplication.UpToDate
  $tmpLyncServer.OS       = $tmpOS.Caption + " " + $tmpOS.CSDVersion
  $tmpLyncServer.RAM      = "!AR!" + $tmpOS.FreePhysicalMemory
  $tmpLyncServer.ProductVersion = $tmpVC.ProductVersion
  $tmpLyncServer.DeploymentType = $tmpVC.DeploymentType

  $tmpLSbP = $LyncServiceByPool | Where {$_.Name -eq $tmpLyncServerId}
  ForEach($item in $tmpLSbP){
    $tmpG = $item.Group
    ForEach($itemG in $tmpG){
      $xRole = $itemG.Role
      $tmpLyncServer.$xRole = $True
    }
  }

  $tmpWinSvc = $LyncWindowsServicesByServer | Where {$_.Name -eq $tmpLyncServerId}
  ForEach($item in $tmpWinSvc){
    $tmpG = $item.Group
    Write-Host $tmpG.count
    ForEach($itemG in $tmpG){
      $xSvc = $itemG.DisplayName
      Write-Host $xSvc
      $tmpLyncServer.$xSvc = $True
    }
  }

  $arrObjects += $tmpLyncServer
}


$HtmlHeader = "
<Style>
  TABLE{border-width: 1px;padding: 1px;border-style: solid;border-color: black;border-collapse: collapse;}
  TD{border-width: 1px;padding: 1px;border-style: solid;border-color: black;}
  TH{font-family:'Arial';font-size:12px;border-width: 1px;padding: 1px;border-style: solid;border-color: black;background-color:peachpuff;layout-flow:vertical-ideographic;Text-align:left}
  TR{font-family:'Arial';font-size:10px}
  P{font-family:'Arial';}
</Style>
<TITLE>LYNC SERVERS</TITLE>"

$z="<B><FONT size='2' face='VERDANA'>Lync Servers</B></FONT><BR><FONT size='1' face='VERDANA'>Last updated: $today</FONT></font><HR size=6 color=Green>"
$xHTML = $arrObjects | ConvertTo-Html -head $HtmlHeader -Title "Lync Server Info" -body $z

$txtYELLOW = @()
$txtAR     = @()
$i=0; $xHTML | foreach{IF ($_ -like "*<td>True*"){ $txtYellow += $i}; $i++}
$txtYELLOW | ForEach{$xHTML[$_] = $xHTML[$_].Replace("<td>True","<td bgcolor=ORANGE>True")}

$i=0; $xHTML | foreach{IF ($_ -like "*>!AR!*"){ $txtAR += $i;}; $i++}
$txtAR | ForEach{$xHTML[$_] = $xHTML[$_].Replace(">!AR!"," align=right>")}


$xEnd = get-Date
$xHTML += "
<HR size=6 color=Green>
<FONT size='1' face='VERDANA'>Script Completed: $xEnd</FONT>
</FONT><BR></BODY>
</HTML>
"

$xHTML      | out-file $xHTMLoutFolderGet-LyncServer.html
$arrObjects | Export-csv Get-LyncServer.csv -NoTypeInformation

Get-PSSession | ForEach{Remove-PSSession -id $_.id}
$errorActionPreference = $errorPref
#End
##########################################################################################

Get-LyncServer v1

#Powershell, #Lync

So I just love Exchange 2010 and PowerShell, and a cmdlet that rocks is Get-ExchangeServer which is a cmdlet that get the attributes of some or all the servers in the Exchange organization.

Lync however doesn’t have a similar cmdlet and that annoyed the hell out of me.  All I want is a list of Lync Servers and what they do .. simple you would think! Think again Disappointed smile

So I knocked this up.  It has some help text too that will help with the usage.  You can run get-help ./get-lyncserver –full

The basic output is a HTML summary matrix and a csv file that I use as input to other scripts.  Essentially I run this script once a day and then the other scripts when needed.

Oh another thing, the connectionuri needs credentials .. help explains how to set them or you get a prompt.

Let me know what you think!  this is v1 to enjoy

You can download the script from here or copy and paste from here:

<#
  .NOTES
  NAME: Get-LyncServer.ps1
  AUTHOR: Paul Flaherty
  Last Edit: "v1.0 [13 February 2012]
  .LINK
  blogs.flaphead.com
  .SYNOPSIS
  This Script gets connects to a Lync Server and enumerates a list
  of all OCS/Lync Servers and gathers additional information.
 .DESCRIPTION
  This script will connect to a Lync Server using the /OcsPowershell URI.
  Once connected it will use Get-CsComputer to get a list of OCS/Lync related servers.
  Then it uses Get-CsService to get a list of Lync Services and the Lync related
  windows services.

  The script then creates a matrix of the data an output a CSV file and HTML web Page
 .OUTPUTS
  Get-LyncServer.html
  Get-LyncServer.csv
 .EXAMPLE
  Get-LyncServer.ps1
  This will prompt you for Credentials and search the AD for a lync server to use
 .EXAMPLE
  Get-LyncServer.ps1 -LyncServer myLyncServer01
  This will prompt you for Credentials and use the specified lync server.
  it will also add the default ad domain to the server name is missing
 .EXAMPLE
  Get-LyncServer.ps1 -CredentialsFile .creds.txt
  This will search the AD for a lync server to use and use the current user account and
  credentials store in the CredentialsFile as the password
 .EXAMPLE
  Get-LyncServer.ps1 -CredentialsFile .creds.txt -LyncServer myLyncServer01
  This will use the specified lync server and use the current user account and
  credentials store in the CredentialsFile as the password
  .PARAMETER LyncServer
  Netbios or FQDN of a lync server to use.
  If the Netbios name is used, the AD Domain DNS name will be appended
  .PARAMETER CredentialsFile
  Credentials Password file for the current logged on user.
  To Create the credentials file run:
  $creds = Get-Credential
  $creds.Password  | ConvertFrom-SecureString | Set-Content creds.txt

#>

PARAM([String]$LyncServer="", [String]$CredentialsFile="")
##########################################################################################
$AppName = "Get-LyncServer.ps1"
$AppVer  = "v1.0 [13 February 2012]"
#v1.0 08 Feb 2012 : A script it born
#
# This script gets a list of Lync Servers
#
#Written By Paul Flaherty
#blogs.flaphead.com
##########################################################################################
$errorPref = $errorActionPreference
$errorActionPreference = "SilentlyContinue"

$ServerName             = hostname
$Today                  = Get-Date
$Global:CurrentUser     = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$Global:CurrentUserName	= $Global:CurrentUser.Name
$xUser                  = $Global:CurrentUserName
$currentdom             = [System.DirectoryServices.ActiveDirectory.Domain]::getcurrentdomain()
$Forest                 = $currentdom.Forest.ToString()
$ForestDomain           = $Forest

$xHTMLoutFolder         = $pwd

##########################################################################################
#Display script name and version
#########################################################################################
Write-host " " $AppName -NoNewLine -foregroundcolor Green
Write-Host ": " $AppVer -foregroundcolor Green
Write-host "`n Run on $ServerName at $Today by $xUser" -foregroundcolor Yellow
Write-Host "|-------------------------------------------------------------------|`n"
##########################################################################################
#Load the Lync bits & bobs
#########################################################################################
If($CredentialsFile -eq "") {
  $creds = Get-Credential -Credential $xUser
}ELSE{
  Write-Host "Using Credentials for " -NoNewLine
  Write-Host $xUser -NoNewLine -ForeGroundColor Yellow
  Write-Host " and password from " -NoNewLine
  Write-Host $CredentialsFile -ForeGroundColor Yellow

  $password = Get-Content $CredentialsFile | ConvertTo-SecureString
  $creds = New-Object System.Management.Automation.PsCredential $xUser,$password
} #$CredentialsFile

If($LyncServer -eq ""){
  Write-Host "Looking in RTCHSUniversalServices for a Lync Server"
  $Forest              = $Forest.Replace(".", ",DC=")
  $Forest              = "DC=" + $Forest
  $Dom                 = "LDAP://"
  $Dom                += $Forest
  $Root                = New-Object DirectoryServices.DirectoryEntry $Dom
  $Filter              = "(&(ObjectCategory=group)(name=*RTCHSUniversalServices*))"
  $selector            = New-Object DirectoryServices.DirectorySearcher $Filter
  $selector.PageSize   = 1000
  $selector.SearchRoot = $root
  $objs                = $selector.findall()
  $tmpGroup            = $objs | Select Path -First 1
  $Group               = [ADSI]$tmpGroup.Path
  $GrpMembers          = $Group.Member
  $grpCnt              = $GrpMembers.Count
  Write-Host "Found Group.  It has " -NoNewLine
  Write-Host  $GrpCnt -NoNewLine -ForeGroundColor Green
  Write-Host " Members"

  $LyncServerList = @()
  ForEach($tmpMember in $GrpMembers){
    $tmpADSI = "LDAP://" + $tmpMember
    $tmpA    = [ADSI]$tmpADSI
    If($tmpA.objectClass -contains "computer"){$LyncServerList += $tmpA.Name}
  }

  $LyncServerList = $LyncServerList | Sort
  $tmpNumber = Get-Random -Minimum 0 -Maximum $LyncServerList.Count
  $LyncServer = $LyncServerList[$tmpNumber]
  $LyncServer = $LyncServer + "." + $ForestDomain
  $LyncConnectionURI = "https://" + $LyncServer + "/OcsPowershell"



}ELSE{
  IF($LyncServer.Contains(".") -eq $False){$LyncServer = $LyncServer + "." + $ForestDomain}
  $LyncConnectionURI = "https://" + $LyncServer + "/OcsPowershell"
}

Write-Host "`nConnecting to:"$LyncConnectionURI
$s=New-PSSession -ConnectionURI $LyncConnectionURI -Credential $creds
If ($s -eq $Null){
  Write-Host "Error connecting to Lync" -Foregroundcolor Red
  Write-Host "Exiting" -Foregroundcolor Yellow
  Exit
}
Import-PSSession $s

$arrObjects = @()
$LyncRoleLabels = @()
$LyncRoleLabels += "Computer", "Pool", "Site", "UpToDate"

Write-Host "`nGetting Lync Servers`t" -NoNewLine
$LyncServers  = Get-CsComputer | Sort Identity
Write-host $LyncServers.Count"`n" -ForeGroundColor Green

Write-Host "Get-CsService`t" -NoNewLine
$LyncService  = Get-CsService
Write-Host $LyncService.count "Services found" -ForeGroundColor Green

Write-Host "`nGetting Windows Services"
$LyncWindowsServices = @()
ForEach($item in $LyncServers){
  $n = $item.Identity
  Write-Host $n"`t" -NoNewLine
  $tmpLWS = @()
  $tmpLWS = Get-Service RTC* -ComputerName $n #| select @{Expression={($_.DisplayName).Replace(" ","")};Label="DisplayName"}, Status
  Write-Host $tmpLWS.count -ForeGroundColor Green
  $LyncWindowsServices += $tmpLWS
}
Write-host "Total Services Found"$LyncWindowsServices.count

$LyncWindowsServicesByServer = $LyncWindowsServices | Group MachineName

#Get Available Roles
Write-host "`nGetting Lync Server Roles"

$LyncRoles = $LyncService | group Role | sort name
ForEach($tmpRole in $LyncRoles){$LyncRoleLabels += $tmpRole.Name}
$LyncServiceByPool = $LyncService | Group PoolFqdn | Sort Name

#Get Available Services
$grpLyncWindowsServices = $LyncWindowsServices | Group DisplayName
$grpLyncWindowsServices | ForEach{$n = $_.name; $LyncRoleLabels += $n}

Write-Host "`nMatrix Label Count" $LyncRoleLabels.count
Write-Debug $LyncRoleLabels

Write-Host "`nBuilding Matrix"
ForEach($tmpServer in $LyncServers){
  $tmpLyncServerId = $tmpServer.Identity
  Write-Host $tmpLyncServerId
  $objSite = Get-CsPool -Identity $tmpServer.pool | Select-Object Site
  $objReplication = $Null
  $objReplication = Get-CsManagementStoreReplicationStatus -ReplicaFqdn $tmpLyncServerId | Select-Object UpToDate
  $strReplication = $objSite.site -replace("Site:","")

  $tmpLyncServer = "" | Select $LyncRoleLabels
  $tmpLyncServer.Computer = $tmpLyncServerId
  $tmpLyncServer.Pool     = $tmpServer.Pool
  $tmpLyncServer.Site     = $strReplication
  $tmpLyncServer.UpToDate = $objReplication.UpToDate

  $tmpLSbP = $LyncServiceByPool | Where {$_.Name -eq $tmpLyncServerId}
  ForEach($item in $tmpLSbP){
    $tmpG = $item.Group
    ForEach($itemG in $tmpG){
      $xRole = $itemG.Role
      $tmpLyncServer.$xRole = $True
    }
  }

  $tmpWinSvc = $LyncWindowsServicesByServer | Where {$_.Name -eq $tmpLyncServerId}
  ForEach($item in $tmpWinSvc){
    $tmpG = $item.Group
    Write-Host $tmpG.count
    ForEach($itemG in $tmpG){
      $xSvc = $itemG.DisplayName
      Write-Host $xSvc
      $tmpLyncServer.$xSvc = $True
    }
  }

  $arrObjects += $tmpLyncServer
}


$HtmlHeader = "
<Style>
  TABLE{border-width: 1px;padding: 1px;border-style: solid;border-color: black;border-collapse: collapse;}
  TD{border-width: 1px;padding: 1px;border-style: solid;border-color: black;}
  TH{font-family:'Arial';font-size:12px;border-width: 1px;padding: 1px;border-style: solid;border-color: black;background-color:peachpuff;layout-flow:vertical-ideographic;Text-align:left}
  TR{font-family:'Arial';font-size:10px}
  P{font-family:'Arial';}
</Style>
<TITLE>LYNC SERVERS</TITLE>"

$z="<B><FONT size='2' face='VERDANA'>Lync Servers</B></FONT><BR><FONT size='1' face='VERDANA'>Last updated: $today</FONT></font><HR size=6 color=Green>"
$xHTML = $arrObjects | ConvertTo-Html -head $HtmlHeader -Title "Lync Server Info" -body $z

$txtYELLOW = @()
$i=0; $xHTML | foreach{IF ($_ -like "*<td>True*"){ $txtYellow += $i}; $i++}
$txtYELLOW | ForEach{$xHTML[$_] = $xHTML[$_].Replace("<td>True","<td bgcolor=ORANGE>True")}


$xEnd = get-Date
$xHTML += "
<HR size=6 color=Green>
<FONT size='1' face='VERDANA'>Script Completed: $xEnd</FONT>
</FONT><BR></BODY>
</HTML>
"

$xHTML      | out-file $xHTMLoutFolderGet-LyncServer.html
$arrObjects | Export-csv Get-LyncServer.csv -NoTypeInformation

Get-PSSession | ForEach{Remove-PSSession -id $_.id}
$errorActionPreference = $errorPref
#End
##########################################################################################

Prognosis Webinar – Top 5 ways to Microsoft Lync success

#Lync

Could be interesting

If you haven’t already registered to attend next week’s Prognosis for Microsoft Lync Webinar, please REGISTER NOW by clicking on the date below for your region. 
In this 60-minute webinar you can learn how Prognosis bridges the gap between server infrastructure management and UC management teams and build the new management skills you need to integrate Microsoft Lync server and voice quality performance management. Accelerate the transition from server and application expertise to real-time Unified Communications management!

Webinar:

Top 5 ways to ensure success in your Microsoft Lync deployment

Dates:

Australia: Tuesday, 17 January 2012, 1pm – 2pm AEDT
Americas: Wednesday, 18 January 2012, 2:00pm – 3:00pm EST
Europe: Wednesday, 18 January 2012, 1:00pm – 2:00pm GMT

A Month in #Exchange and #OCS: September 2011: Events

#Exchange2010 #Lync #MMMUG

#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* New On-Demand Web Content from August 2011

Business Insights Webcast: Office 365 Essentials- Guide to the best online productivity experience in the industry (Level 100)
Office 365 is on the market and thousands of customers have been experiencing the potential of Office 365. Learn about how Office 365 can revolutionize your workplace productivity experience from Jeff Medford, Tech Product Mgr at Microsoft. Jeff is one of the most respected Office 365 resources at Microsoft and has been helping customers & partners realize the potential of Office 365.
https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032491168&EventCategory=5&culture=en-US&CountryCode=US

#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* Webcasts of interest showing at a desktop near you in September 2011

Friday, September 09, 2011
TechNet Webcast: Talk TechNet with Keith Combs and Matt Hester – Episode 58: PowerShell with Sarah Dutkiewicz (Level 200)
https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&EventId=1032493305

Friday, September 16, 2011
TechNet Webcast: Deep Dive: Lync Server 2010 Edge Servers (Level 300)
Understanding the details about how to set up and deploy edge servers is a key feature to allow the customer investment to include users–domain members, partners in a federated infrastructure, and customers–outside of the internal network in the Microsoft Lync Server 2010 experience. Edge servers provide external user connections to the Lync Server platform using the Lync 2010 client not leveraging a VPN connection. In this webcast, we discuss edge server deployment topologies, the Lync Server Planning Tool, and best practices for configuring edge servers. At the end of this webcast, you will be better prepared to answer customer questions and to plan and implement an edge server infrastructure for Lync Server 2010.
https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&EventId=1032492168

Friday, September 23, 2011
TechNet Webcast: Microsoft Lync 2010 High Availability and Resiliency (Level 300)
In this webcast, we explore the new high availability and resiliency offerings from Microsoft Lync Server 2010. These offerings include branch office resiliency, data center resiliency, intrasite high availability architecture, and capabilities for instant messaging, conferencing, and voice workloads. Quadrantechnologies is dedicated to delivering the most advanced innovation and technology to clients. We design and support the deployment of Microsoft Unified Communications, including Microsoft Lync Server 2010 and Microsoft Exchange Server 2010. Our vision as a business solutions company is to provide software support, technical guidance, and system training while ensuring precision, commitment, and effectiveness. 
https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&EventId=1032492171

Tuesday, September 27, 2011
TechNet Webcast: How Microsoft IT Implemented Key Support and Monitoring Requirements (Level 300)
Learn how the Microsoft IT Volume Licensing team reviewed and implemented key support and monitoring requirements for a business-critical application migrated to Windows Azure and Microsoft SQL Azure.
https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&EventId=1032491417

A Month in #Exchange and #OCS: September 2011: News and Downloads

#Exchange2010 #Lync … Sorry about last month guys, been maxed out at work Sad smile

#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* Microsoft Exchange … In Blog Posts & News from last month
Check out Google fast flip too .. for Exchange, OCS and Lync

##*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* New Exchange Downloads from August 2011

Not sure on the new interface

Microsoft Office 365 ITAR-Support Service and Network Descriptions
Microsoft Office 365 for enterprises provides dedicated hosting services for Microsoft productivity solutions that support the security, privacy, and regulatory compliance requirements for the U.S. federal government agencies and International Traffic in Arms Regulations (ITAR).
http://www.microsoft.com/download/en/details.aspx?id=23910

Update Rollup 4 for Exchange Server 2007 Service Pack 3 (KB2509911)
http://www.microsoft.com/download/en/details.aspx?id=26692

Addressing Cloud Computing Security Considerations with a Partner Private Cloud and Addressing Cloud Computing Security Considerations with Office 365
The first paper discusses how to address cloud security considerations using Microsoft Office 365. The second paper discusses how to address cloud security considerations in a private cloud environment and how to strike the right balance between customer and provider responsibilities.
http://www.microsoft.com/download/en/details.aspx?id=26566

Integrating Microsoft Lync Server 2010 and Cisco Unified Communications Manager
This paper describes integrating Lync Server 2010 and Cisco Unified Communications Manager.
http://www.microsoft.com/download/en/details.aspx?id=26800

Microsoft Exchange 2010 Unified Messaging PBX Configuration Note for Cisco Call Manager 5.1 and Cisco Unified Communications Manager 6.x
This PBX configuration note contains information about deploying Exchange 2010 Unified Messaging RTM and Service Pack 1 (SP1) with Cisco Call Manager 5.1 and Cisco Unified Communications Manager 6.x using a direct SIP connection. The PBX configuration note contains configuration settings that are specific to Cisco Call Manager 5.1 and Cisco Unified Communications Manager 6.x.
http://www.microsoft.com/download/en/details.aspx?id=26834

Update Rollup 4 for Exchange Server 2010 Service Pack 1 (KB2579150)
http://www.microsoft.com/download/en/details.aspx?id=26910

Microsoft Online Services Migration Tools
Use this tool to support migration of Microsoft Exchange to Microsoft Online Services.
64 bit: http://www.microsoft.com/download/en/details.aspx?id=7013
32 bit: http://www.microsoft.com/download/en/details.aspx?id=5015

System Center Service Manager – Exchange Connector 2.0
The System Center Service Manager – Exchange Connector 2.0 connects Service Manager to Exchange for processing incoming emails related to incidents and change requests and sending notifications from the console.
http://www.microsoft.com/download/en/details.aspx?id=26927

Microsoft Exchange Server Protocol Documentation
The Microsoft Exchange protocol documentation provides detailed technical specifications for the Microsoft protocols that are implemented and used by Microsoft Exchange to interoperate or communicate with other products. It also provides technical specifications for extensions to industry-standard and other published protocols that are used by Microsoft Exchange.
http://www.microsoft.com/download/en/details.aspx?id=15779

Microsoft Exchange and Microsoft Outlook Standards Documentation
The Microsoft Exchange and Microsoft Outlook standards documentation describes how Exchange and Outlook support industry messaging standards and Requests for Comments (RFCs) documents about iCalendar, Internet Message Access Protocol – Version 4 (IMAP4), and Post Office Protocol – Version 3 (POP3).
http://www.microsoft.com/download/en/details.aspx?id=13800

Microsoft Office 365 Service Descriptions and Service Level Agreements for Dedicated Subscription Plans
Microsoft Office 365 for enterprises provides powerful cloud-based solutions for e-mail, collaboration, instant messaging and web conferencing. The Office 365 dedicated plans deliver these services from a highly reliable network of Microsoft data centers on servers systems dedicated to individual customer—enabling customers to use the latest productivity applications while reducing IT overhead.
http://www.microsoft.com/download/en/details.aspx?id=18128

Best practices for Outlook for Mac 2011
Best practices for Outlook for Mac 2011 This guide represents our advice on how to get the most out of Outlook for Mac 2011.
http://www.microsoft.com/download/en/details.aspx?id=27124

Forefront Online Protection for Exchange Support Service Description
A reference guide that describes the support included in a subscription of stand-alone FOPE
http://www.microsoft.com/download/en/details.aspx?id=26803

Exchange Server 2010 SP1 Sample: Streaming Notifications
This sample application shows how to connect, subscribe to, and handle streaming notification events.
http://www.microsoft.com/download/en/details.aspx?id=27154

Business Productivity Online Services Service Descriptions
Business Productivity Online Services provides enterprise hosted solutions for e-mail, collaboration, instant messaging and Web conferencing delivered from a highly reliable network of Microsoft data centers located strategically throughout the world that provides seamless connectivity to the Microsoft Online suite of services —enabling customers to use the latest productivity applications.
http://www.microsoft.com/download/en/details.aspx?id=18459

Update Rollup 5 for Exchange Server 2010 Service Pack 1 (KB2582113)
http://www.microsoft.com/download/en/details.aspx?id=27193

Microsoft Exchange Server 2010 Install Guide Templates
You can use these templates as a starting point for formally documenting your organization’s server build procedures for servers that will have Microsoft Exchange Server 2010 server roles installed on them.
http://www.microsoft.com/download/en/details.aspx?id=17206

Office 365 for Enterprise Service Descriptions
Office 365 is a suite of Internet-based services that are designed to help meet your needs for robust security, 24/7 reliability, and user productivity. This set of documents provides service descriptions for the components of the suite.
http://www.microsoft.com/download/en/details.aspx?id=13602

A Month in #Exchange and #OCS: July 2011: To Read

Exchange2010 #Lync

#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* Technical White Papers for Exchange Server 2010
http://technet.microsoft.com/en-us/library/bb124558.aspx

#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* Documentation Updates
http://msexchangeteam.com/archive/category/11153.aspx

Introducing the “Exchange Server 2010 Technical Video Series” on TechCenter
Struggling to find an overview of what the latest EAS features are? Planning your migration from Exchange 2003 and looking for a basic introduction to Database Availability Groups (DAGs)? These videos are for you! The Microsoft Exchange team has produced a new portfolio of videos designed to give customers…

Most popular Exchange 2010 TechNet Wiki articles
In case you did not try this yet (or you read our blog through RSS reader only) – that orange “Wiki” link on the navigation bar on top of our blog pages takes you to our TechNet Wiki landing page here: http://social.technet.microsoft.com/wiki/contents/articles/wiki-exchange-server-portal.aspx To give…

#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* Exchange 2007 Documentation Updates
http://technet.microsoft.com/en-us/library/gg490643(v=EXCHG.80).aspx

#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* Office Communication Server Documentation Updates
http://technet.microsoft.com/en-us/library/bb676082.aspx

Lync Server 2010
http://technet.microsoft.com/en-us/library/ff770144.aspx -and- http://technet.microsoft.com/en-us/lync/default.aspx

#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* New KBs from Last Month
New means they appear in KB as Revision 1.0! (well apart from the ones that look interesting too) … I just can’t find a decent source for these anymore! ideas?  KBAlertz just doesnt seem to be updating, so found mskbarticles!
Exchange Online: http://www.mskbarticles.com/index.php?product=13159
Exchange 2003: http://www.mskbarticles.com/index.php?product=1773
Exchange 2007: http://www.mskbarticles.com/index.php?product=10926
Exchange 2010: http://www.mskbarticles.com/index.php?product=13965
Exchange 2010 Coexistence: http://www.mskbarticles.com/index.php?product=14798
Forefront Online Protection for Exchange: http://www.mskbarticles.com/index.php?product=13818
Forefront For Exchange: http://www.mskbarticles.com/index.php?product=14783
Communications Server 2007 R2: http://www.mskbarticles.com/index.php?product=14030
Communicator 2007: http://www.mskbarticles.com/index.php?product=11402
Outlook 2007: http://www.mskbarticles.com/index.php?product=11335
Outlook 2010: http://www.mskbarticles.com/index.php?product=14864
Lync 2010: http://www.mskbarticles.com/index.php?product=15708
Lync Server: http://www.mskbarticles.com/index.php?product=14934
http://blogs.technet.com/b/hot/archive/tags/Messaging+Server/
http://blogs.technet.com/b/trm/archive/tags/unified+communications/

June 30, 2011

  • 2553023 Office 2010 Cumulative Update for June 2011

June 29, 2011

  • 2552972 Description of the Outlook 2010 hotfix package (outlook-x-none.msp): June 28, 2011

June 28, 2011

  • 2544404 Description of the Office Outlook 2007 hotfix package (Outlook-x-none.msp): June 28, 2011
  • 2553933 Description of the Outlook 2010 hotfix package (outlookintl-ko-kr.msp): June 28, 2011
  • 2553911 Description of the Outlook 2010 hotfix package (outexum-x-none.msp): June 28, 2011

June 23, 2011

  • 951000 Messages to a Distribution List are delayed in an Exchange Server 2007 environment

June 22, 2011

  • 2509910 Description of Update Rollup 4 for Exchange Server 2010 Service Pack 1

Fixes from Update Rollup 4

  • 2537099 (http://support.microsoft.com/kb/2537099/ ) “80040154” error message when you try to configure external Client Access namespaces on an Exchange Server 2010 server
  • 2536700 (http://support.microsoft.com/kb/2536700/ ) Outlook stops responding when you try to copy a folder to its subfolder by using Outlook in online mode in an Exchange Server 2010 SP1 environment
  • 2536517 (http://support.microsoft.com/kb/2536517/ ) The Microsoft Exchange RPC Client Access service crashes intermittently on an Exchange Server 2010 server
  • 2536494 (http://support.microsoft.com/kb/2536494/ ) It takes a long time to return results when you perform an Advanced Find search on a mailbox by using Outlook in online mode in an Exchange Server 2010 SP1 environment
  • 2535648 (http://support.microsoft.com/kb/2535648/ ) The EMC takes a long time to open in an Exchange Server 2010 environment
  • 2535130 (http://support.microsoft.com/kb/2535130/ ) Performance in Outlook or in OWA decreases when you use IMAP4 to access the contacts folder in an Exchange Server 2010 environment
  • 2535105 (http://support.microsoft.com/kb/2535105/ ) There is no option to disable the Availability service in an Exchange Server 2010 environment
  • 2533543 (http://support.microsoft.com/kb/2533543/ ) Event ID 2153 is logged on each database availability group member in an Exchange Server 2010 environment
  • 2533538 (http://support.microsoft.com/kb/2533538/ ) You cannot look up the free/busy information of a user who is located on an Exchange Server 2010 organization from another Exchange Server 2010 organization
  • 2533451 (http://support.microsoft.com/kb/2533451/ ) A RBAC role assignee can unexpectedly run the “Update-FileDistributionService” command on an Exchange Server 2010 server that is outside the role assignment scope
  • 2519359 (http://support.microsoft.com/kb/2519359/ ) “Changes to the rule cannot be saved.” error message when you try to create a reply rule by using Outlook in an Exchange Server 2010 environment
  • 2518850 (http://support.microsoft.com/kb/2518850/ ) You cannot receive email messages on a mobile phone by using ActiveSync in an Exchange Server 2010 environment
  • 2517088 (http://support.microsoft.com/kb/2517088/ ) Public folder conflict resolution does not work as usual in an Exchange Server 2010 environment
  • 2515259 (http://support.microsoft.com/kb/2515259/ ) “The items could not be copied.” error message when you run the Get-MailboxSearch cmdlet in an Exchange Server 2010 SP1 environment
  • 2514709 (http://support.microsoft.com/kb/2514709/ ) Event ID 1001 after you successfully the install Exchange Server 2010 Unified Messaging server role
  • 2514574 (http://support.microsoft.com/kb/2514574/ ) The Exchange RPC Client Access service crashes in an Exchange Server 2010 environment
  • 2513723 (http://support.microsoft.com/kb/2513723/ ) The “New-MailboxImportRequest” cmdlet does not import all messages in a .pst file in the ANSI format in an Exchange Server 2010 environment
  • 2512023 (http://support.microsoft.com/kb/2512023/ ) “GetUserOofSettings”, “SetUserOofSettings” and “GetUserAvailability” operations do not support Exchange Impersonation on the Exchange Server 2010 SP1 schema
  • 2511897 (http://support.microsoft.com/kb/2511897/ ) You cannot send an email message to a mailbox for a brief period when you move the mailbox by using online move in an Exchange Server 2010 environment
  • 2507463 (http://support.microsoft.com/kb/2507463/ ) You cannot move a mailbox that contains a corrupted Search Folder in an Exchange Server 2010 environment
  • 2506820 (http://support.microsoft.com/kb/2506820/ ) The free/busy information does not display of a user whose mailbox is located on an Exchange Server 2003 server
  • 2506049 (http://support.microsoft.com/kb/2506049/ ) The hierarchy of a new public folder database on an Exchange Server 2010 SP1 server is not replicated
  • 2505968 (http://support.microsoft.com/kb/2505968/ ) The EdgeTransport.exe process crashes when you apply a rule that contains a bad email address in an Exchange Server 2010 environment
  • 2504453 (http://support.microsoft.com/kb/2504453/ ) You cannot retrieve statistical information about a public folder by using the “Get-PublicFolderStatistics” cmdlet in an Exchange Server 2010 SP1 environment
  • 2503337 (http://support.microsoft.com/kb/2503337/ ) Comments of your meeting response message is missing when you decline a meeting request in an Exchange Server 2010 environment
  • 2501070 (http://support.microsoft.com/kb/2501070/ ) A RBAC role assignee can stop queue processing on an Exchange Server 2010 Hub Transport server or an Exchange Server 2010 Edge Transport server that is outside the role assignment scope
  • 2500903 (http://support.microsoft.com/kb/2500903/ ) A space is missing in the subject line of a “Tentative” meeting response in an Exchange Server 2010 environment
  • 2500648 (http://support.microsoft.com/kb/2500648/ ) “There are no items to show in this view.” error message when you try to view a folder in Outlook in an Exchange Server 2010 environment
  • 2495167 (http://support.microsoft.com/kb/2495167/ ) You cannot recover a deleted public folder by using Outlook or MFCMAPI in an Exchange Server 2010 environment
  • 2495010 (http://support.microsoft.com/kb/2495010/ ) The EdgeTransport.exe process consumes 100% CPU usage on an Exchange Server 2010 Edge Transport server or an Exchange Server 2007 Edge Transport server
  • 2493393 (http://support.microsoft.com/kb/2493393/ ) You cannot use ECP to perform a wipe on a mobile phone in an Exchange Server 2010 SP1 environment
  • 2492068 (http://support.microsoft.com/kb/2492068/ ) “The item cannot be saved to this folder.” error message when try to post an item to a mail-disabled public folder in an Exchange Server 2010 SP1 environment
  • 2491354 (http://support.microsoft.com/kb/2491354/ ) You cannot view the free/busy information of users in a mixed Exchange Server 2007 and Exchange Server 2010 environment
  • 2490134 (http://support.microsoft.com/kb/2490134/ ) A deferred delivery email message is not delivered by using Outlook 2007 in online mode in an Exchange Server 2010 environment
  • 2489964 (http://support.microsoft.com/kb/2489964/ ) An update enables range 0x-0x1F characters in the display name of an Exchange Server 2010 user account
  • 2489938 (http://support.microsoft.com/kb/2489938/ ) The “Connect-ExchangeServer” function does not change the target Exchange server in Exchange Server 2010
  • 2489130 (http://support.microsoft.com/kb/2489130/ ) A RBAC role assignee can unexpectedly change mailbox properties that are outside the management role group scope in an Exchange Server 2010 environment
  • 2488643 (http://support.microsoft.com/kb/2488643/ ) Outlook downloads duplicated POP3 email messages in an Exchange Server 2010 environment
  • 2479188 (http://support.microsoft.com/kb/2479188/ ) The iCal parts of an email message contain invalid entries when they are sent from an Exchange Server 2003 mailbox to an Exchange Server 2010 mailbox
  • 2477273 (http://support.microsoft.com/kb/2477273/ ) The DomainController parameter does not work when you use the “MoveMailbox.ps1” script to move mailboxes in an Exchange Server 2010 environment
  • 2471964 (http://support.microsoft.com/kb/2471964/ ) A NDR is sent to the sender when you move an email message to a personal folder file in an Exchange Server 2010 SP1 or a later version environment
  • 2467619 (http://support.microsoft.com/kb/2467619/ ) A user who manages a distribution group cannot remove another user whose mailbox is disabled in an Exchange Server 2010 environment
  • 2465292 (http://support.microsoft.com/kb/2465292/ ) “MAPI_E_FAILONEPROVIDER (0x8004011D)” error message when you access an Exchange Server 2010 mailbox by using a MAPI application
  • 2446908 (http://support.microsoft.com/kb/2446908/ ) ESE event descriptions are missing in Event Viewer when the Eseutil utility is called on an Exchange Server 2010 SP1 server
  • 2394554 (http://support.microsoft.com/kb/2394554/ ) An email message is not delivered if it contains unsupported encoded characters in the subject line in an Exchange Server 2010 environment
  • 2491951 (http://support.microsoft.com/kb/2491951/ ) You cannot install Exchange Server 2010 SP1 if the NetBIOS domain name of the domain controller contains an ampersand (&) character
  • 2507066 (http://support.microsoft.com/kb/2507066/ ) Administrator audit logging is disabled unexpectedly during an Exchange Server 2010 SP1 installation

June 9, 2011

  • 2549046 Description of cumulative update for Office Communications Server 2007 R2: June, 2011
  • 2544768 An update is available that increases the maximum number of allowed access proxies in an access proxy array in Office Communications Server 2007 R2

June 3, 2011

  • 924284 How to enable the Memory Diagnostic test for 2007 Office products on a Windows Server-based computer

A Month in #Exchange and #OCS: July 2011: Events

#Exchange2010 #Lync #MMMUG

#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* New On-Demand Web Content from June 2011

TechNet Webcast: Lync Server 2010 Architecture Topologies (Level 200)
In this webcast, we describe the overall architecture of Microsoft Lync Server 2010 and the key considerations for the scalability and performance of each server role. This webcast provides the background and framework for the other Lync Server 2010 webcasts and serves as a bridge between the overview session and the drill-downs in the different product areas

TechNet Webcast: Lync Server 2010: Migration and Coexistence (Level 300)
In this webcast, we explore the path of moving from Microsoft Office Communications Server 2007 R2 to Microsoft Lync Server 2010. Although some of the technical functionalities of the products are similar, these are two very different products. Join this webcast to prepare yourself for a successful migration from Communications Server 2007 R2 to Lync Server 2010.

TechNet Webcast: Lync Server 2010: Role-Based Access Control (RBAC) (Level 300)
In this webcast, we introduce the Microsoft Lync Server 2010 Management Shell, a new method of administration and management. The Lync Server 2010 Management Shell is a powerful management interface built on the Windows PowerShell command-line interface, which includes a comprehensive set of cmdlets that are specific to Lync Server 2010. We take a look at various commands and how to perform various management tasks by using the Lync Server 2010 Management Shell.

TechNet Webcast: Consumerization of IT and Sophistication of Attacks (Level 200)
In this webcast, Frank Simorjay discusses how cybercriminals use marketing-like tactics to target consumers, how that can impact an organization, and how you can stay protected.

#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* Webcasts of interest showing at a desktop near you in July 2011

Wednesday, July 13, 2011: TechNet Webcast: Information about Microsoft Security Bulletins for July (Level 200)
Join us for a brief overview of the technical details of the Microsoft security bulletins for July. We intend to address your concerns in this webcast; therefore, most of the webcast is devoted to attendees asking questions and getting answers from Microsoft security experts.

Monday, July 25, 2011: TechNet Webcast: Social Engineering Threat Trends in 2010 (Level 200)
Are you interested in learning how social networking has affected the way that cybercriminals work? According to Microsoft’s Security Intelligence Report, Volume 10, social networking has become one of the most common ways that attackers lure their victims. Learn more about the emerging social engineering threats, and get guidance about how you can protect yourself.