PowerShell Remoto II – Exchange Server 2010

Seguindo o assunto do último post, vou demonstrar como fiz para conectar a uma sessão Powershell para administração do Exchange Server 2010. O link do post anterior é: http://wp.me/p15MPR-8C.

Bem, como meu computador estava fora do domínio, eu fiz uma conexão a outro servidor membro, e de lá estabeleci a conexão ao servidor Exchange. Os comandos estão na própria documentação do Exchange Server (http://technet.microsoft.com/en-us/library/dd298084.aspx).

$excred = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://w-ex10.dominio.com/PowerShell/ -Authentication Kerberos -Credential $excred
Import-PSSession $Session

 

Voilà!

No exemplo da figura, executei o cmdlet Get-ExchangeServer (doc aqui) com sucesso.

 

Bom final de semana a todos!

PowerShell Remoto

Hoje resolvi me dedicar a testar uma funcionalidade que vai me ajudar muito (espero): estabelecer uma sessão PowerShell em um computador remoto.

PowerShell
Qual o problema?

Bem, estabelecer uma sessão Powershell é simples (desde que no computador destino o serviço WinRM esteja iniciado e devidamente configurado):

Enter-PSSession -ComputerName W001

 
O problema é que o meu computador móvel não faz parte de domínio nenhum, e ao prestar suporte, preciso conectar a servidores de vários clientes diferentes. Como resolver esta questão?

Fiz o download de um e-book gratuito no site http://powershellbooks.com, chamado “Secrets of PowerShell Remoting”, e segui os passos delineados ali. Vou reproduzir os comandos necessários. O meu ambiente é o seguinte:

  • Laptop com Windows 8 Pro (PowerShell 3.0)
  • Servidor Windows Server 2008 R2 (PowerShell 2.0)

Vamos lá:

Fase 1 – Servidor

Aqui precisamos iniciar e configurar o serviço WinRM (Windows Remote Management). Podemos fazer isso executando o comando abaixo no Shell do Windows (cmd.exe):

winrm quickconfig

 
O próximo passo é habilitar o PowerShell remoto. Abrindo uma sessão local de PowerShell, rodamos o comando abaixo (é importante lembrar que é necessário abrir o PowerShell com a opção “Run As Administrator”):

Enable-PSRemoting

 
Este comando inicia (se não estiver iniciado), configura o serviço WinRM para início automático, cria um listener HTTP que “ouve” em todos endereços IP e habilita uma exceção no Firewall do Windows. Por padrão, apenas os administradores poderão efetuar a conexão; isso pode ser confirmado com o comando abaixo:

Get-PSSessionConfiguration | FT Name,Permission

 
O passo seguinte é instalar um certificado para comunicação HTTPS. Isso é necessário porque não ocorre autenticação mútua quando o cliente e o servidor PowerShell não fazem parte do mesmo domínio Active Directory. Não vou detalhar como obter um certificado SSL aqui neste post; isso pode ser feito pelo snap-in Certificates no MMC, quando há uma autoridade certificadora interna, ou usando a dica no e-book (Digicert Certificate Utility).

Uma vez que o certificado esteja instalado no armazenamento de certificados pessoais do computador, precisamos extrair duas informações do certificado:

  • Subject (“Issued To”)
  • Thumbprint

De posse destas informações vamos configurar o listener (todo o comando em uma linha única):

winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="xxx"; CertificateThumbprint="yyy"}

 
Neste commando, precisamos subsitituir estes valores:

  • * (asterisco) pelo endereço IP, caso desejemos que seja utilizado um IP especifico, ao invés de todos;
  • xxx: o subject do certificado. Normalmente é o FQDN do computador;
  • yyy: o thumbprint do certificado.

Um exemplo:

winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="W001.dominio.com"; CertificateThumbprint="4e24fbffd29ed04fa67baadb2502e0f6270fa236"}

 

Fase 2 – Cliente

Antes de iniciar, temos que nos certificar que podemos contatar o servidor usando o nome especificado no certificado. No meu ambiente fiz um “contorno” (nome elegante para uma coisa muito feia J): alterei o arquivo HOSTS; também funcionaria especificar o servidor DNS correto.

Agora podemos abrir uma sessão local de PowerShell e fazer a conexão com o servidor remoto:

$c = Get-Credential DOMINIO\Administrator
Enter-PSSession -ComputerName W001.dominio.com -Credential $c -UseSSL

 
Se tudo estiver correto, deverá aparecer um prompt indicando o nome do servidor remoto:

Se ocorrer um erro, informando que não é possível validar o certificado ou verificar se o mesmo foi revogado, isso significa que não é possível contatar a autoridade certificadora que emitiu o certificado. No meu ambiente, para simplificar, fiz uma alteração nas configurações da sessão PowerShell ANTES do estabelecimento da conexão, da seguinte forma:

$sopt = New-PSSessionOption -SkipCACheck -SkipCNCheck –SkipRevocationCheck
Enter-PSSession -ComputerName W001.dominio.com -Credential $c -UseSSL -SessionOption $sopt

 

Bem, espero que esta informação seja útil.

“Função” Substring dentro do Prompt de Comando

Olá a todos.

O post que inicia a semana não é especificamente sobre SQL Server, mas pode vir a ser utilizado.
Vamos entender melhor:

Ocasionalmente, precisamos efetuar backups de bancos de dados utilizando a data e hora atuais como parte do nome (como faz a “Backup Database Task”, dentro dos planos de execução).

Extrair estes dados utilizando as linguagens T-SQL ou VBScript é simples, mas o que dizer quando a execução do backup é feita através de uma tarefa agendada que invoca SQLCMD.EXE?

Há duas alternativas:

  1. Criar um arquivo com a lógica do backup, usando T-SQL, e passar como parâmetro do utilitário SQLCMD.EXE (SQLCMD -i input.sql …)
  2. Criar um arquivo BAT ou CMD e extrair os valores de dia, mês, ano, hora, minuto das variáveis de ambiente DATE e TIME.

O foco deste post é mostrar como implementar a segunda opção.

É uma funcionalidade pouco conhecida do Shell do Windows (cmd.exe) o uso do operador :~ em conjunto com outras variáveis de ambiente.
Por exemplo:

SET VAR1=HELLO
ECHO %VAR1:~2%

O resultado é “LLO”; significa que são retornados os caracteres a partir da posição 3 (sim, o primeiro valor do índice é zero) até o fim da string.
Se quisermos apenas alguns caracteres, temos que informar a quantidade ao usar o operador:

ECHO %VAR1:~2,2%

Resultado: LL

Com base nestes resultados, já podemos criar nosso arquivo batch que fará a execução do backup:

@ECHO OFF

SET DT=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%

SET TM=%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%

SQLCMD -E -S . -Q “BACKUP DATABASE [DB1] TO DISK = ‘D:\Temp\Backup\DB1_FULL_%DT%_%TM%.BAK’ WITH INIT “

Agora, podemos incrementar nosso arquivo batch com parâmetros para substituição, log, etc.

Atualização:

No meu ambiente, as configurações regionais estão definidas como Português-Brasil (formato DD/MM/YYYY. Logo, se o servidor ou estação estiver em inglês ou outro idioma, será necessário fazer uma adaptação.

 

Espero que tenha contribuído.
Boa semana a todos.

System Center Essentials 2007

Localização do banco de dados do System Center Essentials:

HKLMSoftwareMicrosoftMicrosoft Operations Manager3.0SetupDatabaseName 

Pode ser útil ao encontrar o erro abaixo:

"Uma exceção de banco de dados foi acionada no serviço SDK do Operations Manager.
Mensagem de Exceção: Invalid object name ‘dbo.DataAccessLayerSetting’."

Quote:
How to Back Up and Restore System Center Essentials
http://technet.microsoft.com/en-us/library/bb437269.aspx

Como selecionar qualquer edição ou versão (SKU) do Windows 7 usando o DVD de instalação

Todos DVDs de qualquer edição do Windows 7 contém todas versões do Windows 7 (desde Starter, Home Basic, Home Premium, Professional até Ultimate).
 
A possibilidade de escolha da versão está no arquivo de confiuguração, chamado EI.CFG.
Exemplo:
[EditionID]
Ultimate
[Channel]
Retail
[VL]
0
Quando o arquivo não existir, aparecerá um prompt durante a instalação:
 
 
É possivel remover ou editar o arquivo para obter este comportamento. Mais informações na "Fonte", link abaixo.
 
 
At.
 
Marcelo