• Scripts para executar o Disaster Recorver do Lync 2013 (Pool Pairing)

    Os scripts abaixo podem ser usado para similar um disaster recover do Lync Server 2013 configurado com Pool Pairing, ou seja, 2 Pools Ativo-Ativo.

    Neste cenário o CMS está no pool Lyncsdt01.contoso.com e os usuários estão divididos entre os 2 Pools (Lyncsdt01.contoso.com  e Lyncsdt02.contoso.com).

    O script migra o CMS para o pool Lyncsdt02.contoso.com  e ativa todos os usuários do pool Lyncsdt01.contoso.com  no pool Lyncsdt02.contoso.com..

    Cenário onde a parade do pool Lyncsdt01.contoso.com  é programada.

    Start-CsWindowsService -ComputerName LYNCSTD01.contoso.com
    Start-CsWindowsService -ComputerName LYNCSTD02.contoso.com
    Get-CsBackupServiceStatus -PoolFqdn lyncstd01.contoso.com
    Get-CsBackupServiceStatus -PoolFqdn lyncstd02.contoso.com
    Invoke-CsManagementServerFailover -BackupSqlInstanceName RTC -BackupSqlServerFqdn lyncSTD02.contoso.com -Force:$False -Confirm:$False
    Invoke-CsPoolFailOver -PoolFqdn lyncstd01.contoso.com -DisasterMode:$False -Confirm:$False

    O script abaixo volta o CMS para o pool Lyncsdt01.contoso.com e reativa os usuários no pool Lyncsdt01.contoso.com.


    Invoke-CsPoolFailBack -PoolFqdn lyncstd01.contoso.com -DisasterMode:$False -Confirm:$False
    Invoke-CsManagementServerFailover -BackupSqlInstanceName RTC -BackupSqlServerFqdn lyncSTD01.contoso.com -Force:$False -Confirm:$False
    Get-CsBackupServiceStatus -PoolFqdn lyncstd01.contoso.com
    Start-CsWindowsService -ComputerName LYNCSTD01.contoso.com
    Start-CsWindowsService -ComputerName LYNCSTD02.contoso.com

    Cenário onde o pool Lyncsdt01.contoso.com ficou indisponível (não programado).

    OBS.: a única diferença do script acima é que os parâmetros Force (comando Invoke-CsManagementServerFailover ) e DisasterMode (comando Invoke-CsPoolFailOver) devem ser configurados como True, pois o Lyncsdt01.contoso.com  não está disponível. No script de failback (segunda parte) não há diferença, pois considera-se que na hora de fazer o failback ambos os pools estão disponíveis.

    Start-CsWindowsService -ComputerName LYNCSTD01.contoso.com
    Start-CsWindowsService -ComputerName LYNCSTD02.contoso.com
    Get-CsBackupServiceStatus -PoolFqdn lyncstd01.contoso.com
    Get-CsBackupServiceStatus -PoolFqdn lyncstd02.contoso.com
    Invoke-CsManagementServerFailover -BackupSqlInstanceName RTC -BackupSqlServerFqdn lyncSTD02.contoso.com -Force:$True -Confirm:$False
    Invoke-CsPoolFailOver -PoolFqdn lyncstd01.contoso.com -DisasterMode:$True-Confirm:$False

    Invoke-CsPoolFailBack -PoolFqdn lyncstd01.contoso.com -DisasterMode:$False -Confirm:$False
    Invoke-CsManagementServerFailover -BackupSqlInstanceName RTC -BackupSqlServerFqdn lyncSTD01.contoso.com -Force:$False -Confirm:$False
    Get-CsBackupServiceStatus -PoolFqdn lyncstd01.contoso.com
    Start-CsWindowsService -ComputerName LYNCSTD01.contoso.com
    Start-CsWindowsService -ComputerName LYNCSTD02.contoso.com

  • Como listar o Routing Groups do Lync Server 2103

    Um das novidades do Lync Server 2013 são os Routing Groups, mais detalhes vocês encontram em:(http://blogs.technet.com/b/rischwen/archive/2014/02/24/lync-2013-high-availability-deep-dive-architecture.aspx).

    Atualmente, não existem cmdlets que mostram detalhes dos Routing Groups, nem mesmo listam eles. Pois isso, consolidei o conteúdo de várias fontes e gerei um script PowerShell que conecta no SQL Server e apresenta a lista dos Routing Groups, nome do servidor Front End e usuários associados ao Routing Group.

    Para rodar o script abaixo, basta modificar a primeira linha do script ($SqlServer = ), usando o format “FrondEndServer\SQLInstance”.

    #***** Inicio do script *******

    $SqlServer = "lyncent01\rtclocal"
    $SqlDatabase = "rtc"
        
    $SqlQuery = "Select RoutingGroupAssignment.RoutingGroupName, FrontEnd.Fqdn, Resource.UserAtHost from [rtc].[dbo].ResourceDirectory
    INNER JOIN [rtc].[dbo].Resource
    ON ResourceDirectory.ResourceId=Resource.ResourceId
    INNER JOIN [rtc].[dbo].RoutingGroupAssignment
    ON ResourceDirectory.RoutingGroupId=RoutingGroupAssignment.RoutingGroupId
    INNER JOIN [rtc].[dbo].FrontEnd
    ON RoutingGroupAssignment.FrontEndId=FrontEnd.FrontEndId
    ORDER BY [rtc].[dbo].RoutingGroupAssignment.RoutingGroupId"

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Server = $SqlServer; Database =
    $SqlDatabase; Integrated Security = True"
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = $SqlQuery
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    $SqlConnection.Close()
    Clear
    #output the data
    $DataSet.Tables[0]

    #***** Final do script *******

    O resultado esperado é algo como:


    RoutingGroupName                      Fqdn                    UserAtHost
    ----------------                      ----                    ----------
    fd09e63c-8643-5799-bd0c-9bd54af88858  LYNCENT03.contoso.com   RtcApplication-3dd1..
    fd09e63c-8643-5799-bd0c-9bd54af88858  LYNCENT03.contoso.com   GC-1-PersistentChat..
    fd09e63c-8643-5799-bd0c-9bd54af88858  LYNCENT03.contoso.com   Yan@contoso.com
    cc509a2a-6ebc-50e2-9ee1-140cf72076bb  LYNCENT01.contoso.com   Jeff@contoso.com
    406f2b07-bb5b-563c-a588-ae387660b98b  LYNCENT01.contoso.com   Jim@contoso.com
    a83fca89-c2a8-56fb-9a38-9f8ec8e2a983  LYNCENT03.contoso.com   Jon@contoso.com
    255e1329-a560-52b2-98d3-67c49ec81d38  LYNCENT02.contoso.com   Mike@contoso.com
    94a40ddd-e63d-50b7-a8b8-b8733245053b  LYNCENT02.contoso.com   Nate@contoso.com
    5ea41329-5003-560a-bd08-90f2cfa2560e  LYNCENT02.contoso.com   Toby@contoso.com

    Ref.: http://blogs.technet.com/b/rischwen/rss.aspx

  • Instalação do requisitos do Lync Server 2013 sem mouse

    Estou montando um ambiente com Lync Server 2013 e decidi automatizar alguns passos para ganhar tempo.
    O ambiente que estou mantando é composto 5 servidores com as seguintes características:
    • Server 1 - Active Directory - Windows Server 2012 fazendo o papel de File Store do Lync
    • Server 2 - Lync Back End - Windows Server 2012 rodando SQL Server 2012
    • Server 3 - Lync Front End – Windows Server 2012 rodando Lync Server 2013 (todos os papéis)
    • Server 4 - WAC – Windows Server 2012 rodando Office Web Apps Server 2013
    • Server 5 - Lync Edge – Windows Server 2012 rodando Lync Server 2013
     
    Instalação dos requisitos
    Para fazer a instalação do requisitos para cada um dos servidores utilize os comandos abaixo: 
    OBS.: Sempre gosto de adicionar o Telnet Client (não é obrigatório) para facilitar os testes de conectividade.
    • Server 1 - Active Directory - Windows Server 2012 fazendo o papel de File Store do Lync
    Criar o File Store: (utilize o Command Prompt)
    mkdir c:\LyncShare
    net share LyncShare=c:\LyncShare /GRANT:Administrators,FULL /GRANT:Everyone,Read
    Instalar os pré-requisitos para extensão do schema: (utilize o Command Prompt)
    OBS.: A unidade D representa o DVD do Lync Server 2013
    D:\setup\amd64\vcredist_x64.exe /install /passive
    msiexec /I D:\setup\amd64\setup\ocscore.msi /passive
    Estender o schema para o Lync Server 2013: (utilize o PowerShell)
    OBS.: A unidade D representa o DVD do Windows Server 2012
    Install-CsAdServerSchema
    Enable-CsAdForest
    Enable-CsAdDomain
    Add-WindowsFeature Telnet-Client -Source D:\Sources\sxs
     
    • Server 2 - Lync Back End - Windows Server 2012 rodando SQL Server 2012
    Instalar os pré-requisitos para SQL Server 2012: (utilize o PowerShell)
    OBS.: A unidade D representa o DVD do Windows Server 2012
    Add-WindowsFeature Net-Framework-Core,Telnet-Client -Source D:\Sources\sxs
    Criar a instância RTC com Database Engine, Reporting Service e Ferramentas de adminsitração: (utilize o Command Prompt)
    OBS.: A unidade D representa o DVD do SQL Server 2012
    d:\Setup.exe /QUIETSIMPLE /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQLEngine,RS,Tools, /INSTANCENAME=RTC /TCPENABLED=1 /SQLSVCACCOUNT="NT AUTHORITY\NetworkService" /SQLSYSADMINACCOUNTS="Builtin\Administrators" /BROWSERSVCSTARTUPTYPE="Automatic" /AGTSVCACCOUNT="NT AUTHORITY\NetworkService" /SQLSVCSTARTUPTYPE="Automatic"
     
    • Server 3 - Lync Front End – Windows Server 2012 rodando Lync Server 2013 (todos os papéis)
    Instalar os pré-requisitos para Lync Server 2013: (utilize o PowerShell)
    OBS.: A unidade D representa o DVD do Windows Server 2012
    Add-WindowsFeature RSAT-ADDS, Web-Server, Web-Static-Content, Web-Default-Doc, Web-Http-Errors, Web-Asp-Net, Web-Net-Ext, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Http-Logging, Web-Log-Libraries, Web-Request-Monitor, Web-Http-Tracing, Web-Basic-Auth, Web-Windows-Auth, Web-Client-Auth, Web-Filtering, Web-Stat-Compression, Web-Dyn-Compression, NET-WCF-HTTP-Activation45, Web-Asp-Net45, Web-Mgmt-Tools, Web-Scripting-Tools, Web-Mgmt-Compat, Desktop-Experience, Telnet-Client, BITS, Windows-Identity-Foundation -Source D:\sources\sxs

     

    • Server 4 - WAC – Windows Server 2012 rodando Office Web Apps Server 2013
    Instalar os pré-requisitos para Office Web Apps 2013 Server: (utilize o PowerShell)
    OBS.: A unidade D representa o DVD do Windows Server 2012
    Add-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-WebServer,Web-Common-Http,Web-Default-Doc,Web-Static-Content,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Security,Web-Filtering,Web-Windows-Auth,Web-App-Dev,Web-Net-Ext45,Web-Asp-Net45,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Includes,InkandHandwritingServices,NET-Framework-Features,NET-Framework-Core,Telnet-Client -Source D:\Sources\sxs
    Instalar o Office Web Apps 2013: (utilize o Command Prompt)
    OBS.: Faça o “mount” do arquivo IMG na unidade E:\) - http://www.microsoft.com/en-us/download/details.aspx?id=35489
    setup.exe /config e:\files\setupsilent\config.xml
    Atualizar o Office Web Apps 2013: (utilize o Command Prompt)
    OBS.: Atualização de Novembro 2013 do Office Web Apps a partir da unidade D) - http://support.microsoft.com/kb/2837634
    d:\wacserver2013-kb2837634-fullfile-x64-glb.exe /passive
    Configurar o Office Web Apps 2013 Server: (utilize o PowerShell)
    New-OfficeWebAppsFarm -InternalUrl https://officeapps01.hunecke.net -ExternalUrl https://officeapps01.hunecke.net -CertificateName "Lync-Internal-WACServer”

     

    • Server 5 - Lync Edge – Windows Server 2012 rodando Lync Server 2013
    Instalar os pré-requisitos para Lync Server 2013: (utilize o PowerShell)
    OBS.: A unidade D representa o DVD do WIndows Server 2012
    Add-WindowsFeature Telnet-Client, Windows-Identity-Foundation -Source D:\sources\sxs
     
    Observação sobre o ambiente e sua configuração:
    1. O ambiente está sendo montado com a versão Enterprise do Lync Server 2013.
    • A extensão do schema foi executada no Domain Controller, mas também pode ser excutada em qualquer servidor que estiver no domínio.
    • Estou utilizando somente uma instância do SQL Server para “econimizar” hardware, mas em um ambiente de produção considere criar 3 instâncias (RTC, Monitoring e Archiving).
    • Na configuração Office Web Apps Server 2013 o nome “Lync-Internal-WACServer” deve ser alterado conforme o campo “Friendly Name” do certificado que foi instalado no WAC Server.
  • Novas regras de ortografia disponíveis no OWA 2007

    Em Setembro de 2008 o governo brasileiro assinou o Decreto 6583, conforme link: http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6583.htm, criando novas regras ortográficas para a língua portuguesa. O decreto prevê uma coexistência de 1o de janeiro de 2009 a 31 de dezembro de 2012, dos 2 padrões.

    No dia 16/04/2012 a Microsoft lançou o Update Rollup 7 for Exchange Server 2007 Service Pack 3 que inclui as novas regras de ortografia no corretor ortográfico do OWA (Outlook Web Access) 2007.

    Mais detalhes em: http://support.microsoft.com/kb/2655203

    O OWA 2010 terá essa correção somente na próxima atualização, o Update Rollup 3 for Exchange Server 2010 Service Pack 2.

  • Como identificar a versão “exata” (Service Pack + Rollup) do ambiente Exchange

    Na console do Exchange 2007/2010 não é possível visualizar a versão do Rollup instalado, por isso, desenvolvi um script (muito simples) para ajudá-los na identificação exata da versão de cada servidor.

    O script copia o arquivo exsetup.exe de cada servidor para uma pasta no servidor e ao final abre uma janela do Explorer com a versão de cada servidor Exchange, conforme figura abaixo:

    image

    OBS.: A coluna File Version não é apresentada por padrão no Windows Explorer, para adicioná-la, clique com o botão direto sobre qualquer coluna, clique em More..., selecione File Version e clique em Ok.

    O script utilizado é:

    md c:\windows\temp\Exch_Ver
    copy \\cas01\e$\Exchange\Bin\exsetup.exe c:\windows\temp\Exch_Ver\CAS01.exe
    copy \\hub01\e$\Exchange\Bin\exsetup.exe c:\windows\temp\Exch_Ver\HUB01.exe
    copy \\mbx01\e$\Exchange\Bin\exsetup.exe c:\windows\temp\Exch_Ver\MBX01.exe
    copy \\mbx02\e$\Exchange\Bin\exsetup.exe c:\windows\temp\Exch_Ver\MBX02.exe
    explorer c:\windows\temp\Exch_Ver

    OBS: No meu ambiente o Exchange está instalado no drive E:\ na pasta Exchange. Adicione uma linha para cada servidor do seu ambiente.

    Para mais detalhes das versões de Service Pack e Rollup disponíveis para Exchange 2007 e 2010 consulte o artigo: Exchange Server Build Numbers and Release Dates - http://technet.microsoft.com/en-us/library/hh135098.aspx