segunda-feira, 28 de outubro de 2013

Criando um relatório com membros de grupos do AD em html usando powershell

Segue um exemplo de como criar um relatório em html usando powershell do usuário membros de grupos dentro de um determinada OU.
Esse script pode ser adaptado para consultar grupos com diversas condições.


import-module activedirectory

# Aqui pode-se limitar os grupos a uma OU ou ao dominio inteiro
$OU = 'OU=Grupos_Permissoes_Pastas'

#Tambem pode-se customizar essa pesquisa
$Groups = Get-ADGroup -Filter '*' | select-object * | where-object {$_.distinguishedname -like "*,$OU,*"} | Select-Object Name

#Groups = Get-ADGroup -filter {Name -like $GroupName} | Select-Object Name#

$fileName = "GroupReport.html" 
New-Item -ItemType file $fileName -Force 
 
# Codigo HTML 
Add-Content $fileName "<html>" 
Add-Content $fileName "<head>" 
add-content $fileName '<STYLE TYPE="text/css">' 
add-content $fileName  "<!--" 
add-content $fileName  "td {" 
add-content $fileName  "font-family: Tahoma;" 
add-content $fileName  "font-size: 11px;" 
add-content $fileName  "border-top: 1px solid #999999;" 
add-content $fileName  "border-right: 1px solid #999999;" 
add-content $fileName  "border-bottom: 1px solid #999999;" 
add-content $fileName  "border-left: 1px solid #999999;" 
add-content $fileName  "padding-top: 0px;" 
add-content $fileName  "padding-right: 0px;" 
add-content $fileName  "padding-bottom: 0px;" 
add-content $fileName  "padding-left: 0px;" 
add-content $fileName  "}" 
add-content $fileName  "body {" 
add-content $fileName  "margin-left: 5px;" 
add-content $fileName  "margin-top: 5px;" 
add-content $fileName  "margin-right: 0px;" 
add-content $fileName  "margin-bottom: 10px;" 
add-content $fileName  "" 
add-content $fileName  "table {" 
add-content $fileName  "border: thin solid #000000;" 
add-content $fileName  "}" 
add-content $fileName  "-->" 
add-content $fileName  "</style>" 
Add-Content $fileName "</head>" 
Add-Content $fileName "<body>" 
Add-Content $fileName "<table width='100%'>" 
Add-Content $fileName "<tr bgcolor='#0000FF'>" 
Add-Content $fileName ("<td width='35%'><font size=6>Grupo do Active Directory e seus membros na " + $OU + "</font></td>" )
Add-Content $fileName "</tr>" 
 
$alternateTableRowBackground = 0

ForEach ($Group in $Groups)
   {
   Add-Content $fileName "<tr bgcolor='#FFD700'>"
   Add-Content $fileName ("<td width='30%'>" + $group.name + "</td>")
   Add-Content $fileName "<tr bgcolor='#FCFCFC'>"
   $membros = Get-ADGroupMember -identity $($group.name) -recursive | Select-Object samaccountname,Name
   Add-Content $fileName ("<td width='30%'>")
        ForEach ($member in $membros)
            {
                Add-Content $fileName ( $member.Name + "->" + $member.samaccountname + "</br>")
            }
   Add-Content $fileName ("</td>") 
   Add-Content $fileName "</tr>"
 
   }

Add-Content $fileName "</table>" 
 
Add-Content $fileName "</body>" 
 
Add-Content $fileName "</html>"




quinta-feira, 18 de abril de 2013

Automatização das assinaturas no OWA.

Pessoal, recentemente tive essa demanda e gastei um bom tempo pesquisando e não tinha encontrado nada pronto para esse devido fim. Resultado tive de desenvolver um script em powershell para isso.
A ideia é criar assinaturas automatizadas para os usuários do OWA, aonde as informações que compõem a assinatura venham das informações dos usuários cadastradas no Active Directory.
O exemplo a seguir foi homologado com Exchange 2010, mas é muito provável que funcione com Exchange 2007 e 2013, assim que eu homologar eu posto a compatibilidade. Ele pode servir de base para scripts mais complexos. Lembrando que os dados que você for utilizar devem estar preenchidos nos objetos dos usuários no Active Directory.
Neste exemplo utilizamos um arquivo PNG para anexar uma imagem no final da assinatura, e esse arquivo deve estar hospedado no site que consta na propriedade do usuário no Active Directory.
 Você pode agendar esse script seguindo a dica de rodar comando agendados no post sobre balanceamento de databases do Exchange.
OBS: Esse Script só deve ser utilizado por quem sabe o que está fazendo e com o quê está lidando! Use por sua conta e risco




Import-Module activedirectory
$Caixa = Get-Mailbox -ResultSize Unlimited
function Lista
{
$args[0]
$user2Find = $args[0]
$user = Get-ADUser $user2Find -Properties DisplayName,Title,Department,telephoneNumber,Company,Office,wWWHomePage
$NomeUsuario = $user.DisplayName
$Titulo = $user.Title<
$Departamento = $user.Department
$Telefone = $user.telephoneNumber
$Unidade = $user.Company
$Escritorio = $user.Office
$Url = $user.wWWHomePage
$pagina="<html><head><style>p{margin: 3px;padding: 0px;}#space{margin-bottom: 15px !important;}</style></head>"
$pagina = $pagina + "<br/><br/><body><p><font color=#215868 face=Cambria size=2><b>Att.</b></font></p>"
$pagina = $pagina + "<p><font color=#215868 face=Cambria size=3><b>$NomeUsuario</b></font></p>"
$pagina = $pagina + "<p><font color=#808080 face=Cambria size=2>$Titulo</font></p>"
$pagina = $pagina + "<p><font color=#808080 face=Cambria size=2>$Departamento  |  $Telefone</font></p><br/>"
$pagina = $pagina + "<p><font color=#808080 face=Cambria size=2>$Unidade  | Ribeirao Preto - SP - Brasil</font></p>"
$pagina = $pagina + "<p><font color=#808080 face=Cambria size=2>$Escritorio  |  0XXX XX XX XX</font></p>"
$pagina = $pagina + "<p><font color=#808080 face=Cambria size=2>Website: <a href=http://$Url>$Url</a></font></p>"
$pagina = $pagina + "<p><img src=http://$Url/logo.png /></p>"


Set-MailboxMessageConfiguration -identity $args[0] -SignatureHtml $pagina 
Set-MailboxMessageConfiguration -Identity $args[0] -AutoAddSignature $true
}

$Caixa | ForEach-Object { Lista $_.Alias }
 

Em um proximo post vou mostrar como realizar a mesma automação, mas nos outlooks dos usuários.

sexta-feira, 12 de abril de 2013

Agendando auto balanceamento de databases no Exchange

Se você precisa que suas databases do Exchange sejam balanceadas entre os nós do seu cluster automaticamente, basta criar uma tarefa agendada com o comando abaixo:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command ". 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; . 'c:\program files\microsoft\exchange server\v14\scripts\redistributeactivedatabases.ps1' -DagName NOME-DO-DAG -BalanceDbsByActivationPreference -Confirm:$False"

O Script distribui as Mailbox Databases conforme a preferencia de ativação.
Para verificar a preferência de ativação utilize:


[PS] C:\>Get-MailboxDatabase | ft name, server, activationpreference -AutoSize


É necessário que suas databases estejam com afinidade configurada e que a politica dos MailboxServers estejam como "Unrestricted"

Para verificar a politica utilize o seguinte comando.
 [PS] C:\>Get-MailboxServer | ft name,databasecopy* -auto  
 Name     DatabaseCopyAutoActivationPolicy  
 ----     --------------------------------  
 BO-EX-MB1           Unrestricted  
 BO-EX-MB2           Unrestricted  



Caso não esteja como "Unrestricted", Utilize o comando a seguir para configurar a politica.



 [PS] C:\>Set-MailboxServer -Identity BO-EX-MB1 –DatabaseCopyAutoActivation Policy Unrestricted  

terça-feira, 9 de abril de 2013

Oracle Database e virtualização do ponto de vista de licenciamento

Muitas pessoas (Inclusive eu até a algum tempo) podem se enganar quando o assunto é licenciamento de Servidores Oracles Database em ambiente virtualizado.
O Oracle é comercializado em duas maneiras: Por processador ou por Usuários.
O foco aqui é discutir o licenciamento por processador (Aqui em nossa região pelo que vejo é o mais utilizado), quando a Oracle diz processador ela não se refere a núcleos e sim a pastilhas, o numero de processadores físicos presente no ambiente.
Hoje se você possui um servidor Oracle físico com um único processador licenciado e resolva virtualiza-lo no seu novo Cluster de virtualização com dois nós e dois processadores físicos em cada, você teria de adquirir mais 3 licenças, mesmo se sua maquina virtual esteja configurada para utilizar somente um processador. Isto tem causado grandes discussões em foruns relacionados ao assunto.
No ponto de vista da Oracle se você está utilizando um ambiente que sua maquina virtual pode flutuar entre os nós do cluster e os processadores neles contidos, você tem que licenciar todas as pastilhas de processadores, levando em conta que hoje em média cada licença do Oracle Standard Edition One custa R$16,000 isso acaba desestimulando o uso de ambiente virtual para muitos.
Um dos motivos de discussão é que determinadas tecnologias de virtualização permitem que você restrinja uma determinada maquina virtual a um único processador e um único host no cluster o que vai contra a visão da Oracle. A Oracle poderia disponibilizar um licenciamento voltado para ambiente virtual para minimizar esse custo e estimular a pratica para quem possui poucos bancos de dados, assim como a Microsoft fez com o SQL Server. A unica vantagem desse modelo adota pela Oracle é que você poderá executar quantas estancias do banco seu ambiente aguentar.

sexta-feira, 5 de abril de 2013

Relatórios de navegação com usuários do Captive Portal no PFSense 2.0.1 e 2.0.2


Para versão 2.1 do PFsense consultar o seguinte endereço IT Friends


A um bom tempo eu precisei gerar relatórios de navegação para usuários do Captive Portal do PFSense e encontrei uma adaptação do lightsquid para isso, mas ela não funcionava corretamente nas versões 2.0.x do PFSense, corrigi os problemas e adicionei as libs que faltam no PFSense no pacote e disponibilizei no forum oficial.
Mas algumas premissas devem ser seguidas para que a geração fique 100%.
1) Deve-se setar no Captive Portal um HardTimeout, mesmo que seja de 12 ou 24 horas.
2) O Leasing do DHCP deve ser pelo menos o dobro do HardTimeout do Captive Portal.
3) Por padrão o log de autenticações do PFSense ao Captive Portal é bem pequeno, se seu fluxo de usuários for muto grande, deve-se aumentar esse log.
OBS: faça um backup do /etc/rc pois o VI do PFSense costuma jogar lixo as vezes ao salvar, então após editar e salvar edite o arquivo novamente e veja se está tudo no lugar.

Para isso edite o arquivo /etc/rc do PFSense e altere a que contem /var/log/portalauth.log. Por padrão esse log é circular e tem 65k de tamanho, o valor da figura abaixo está configurando para 10Mb.
Reinicie o firewall para que as alterações entre em vigor.
Agora você pode baixar o arquivo com as modificações em http://www.4shared.com/rar/f7-AmAnV/ip2name.html Dentro do arquivo Rar tem um txt Readme com as instruções de como instalar.
Depois de instalado nas configurações do lightsquid você terá a opção de layout do Captive Portal.

Outra dica para copiar o arquivo para o dentro do PFSense utilize o WinSCP e na hora da conexão utilize o usuário root com a senha do usuário admin e em File Protocol utilize SCP.
Apos realizar esse procedimentos na tela de configuração do lightsquid você terá a opção CaptivePortal para geração de relatórios.

Após instalar o Linux IC em uma maquina virtual o CDROM desaparece

Esse problema até a presente data não tem uma solução definitiva feita pela Microsoft, mas ela mesmo disponibiliza uma solução de contorno.
Esse problema afeta as maquinas virtuais Centos e RHEL com a os IC 3.2 e 3.4

Basta carregar o driver do cdrom antes de montar
insmod /lib/modules/$(uname -r)/kernel/drivers/ata/ata_piix.ko


Problemas com download do OAB no Exchange 2010 ou 2007 erro 500

As vezes podemos nos deparar com problemas com a atualização do catalogo de endereços com nosso clientes.
Umas das causas mais comum é o erro 500 ao acessar a pasta do OAB pelo IIS.








Esse erro na grande maioria das vezes é causado no momento que se configura o redirecionamento do http para https seguindo o KB: http://technet.microsoft.com/en-us/library/aa998359.aspx .Quando o redirecionamento é criado todos os diretórios virtuais são configurados com o mesmo redirecionamento, isso gera uma série de erros no Exchange, que deve ser corrigido removendo o redirecionamento dos diretórios virtuais. Mas mesmo removendo do diretório do OAB o problema pode persistir, isso acontece porque o arquivo web.config do diretório virtual é criado com as permissões erradas.

Uma forma rápida de corrigir esse problema é no CAS server acessar a console do IIS, navegar até o Diretório virtual clicar em exibição de conteúdo, e editar as permissões do arquivo web.config, dando permissão aos Usuários Autenticados de ler e executar.