domingo, setembro 03, 2017

How to move Web App to another Service Plan - PowerShell

Create two Service Plan
>New-AzureRmAppServicePlan -Name AppService1 -Location "North Central US" -ResourceGroupName 70533 -Tier Basic

>New-AzureRmAppServicePlan -Name AppService2 -Location "North Central US" -ResourceGroupName 70533 -Tier Basic

Create a new Web App using Service Plan name AppService1:
>New-AzureRmWebApp -Name maykon -Location "North Central US" -AppServicePlan AppService1 -ResourceGroupName 70533

Move to different AppServicePlan
>$props = @{"ServerfarmId" = "AppService2";}
>Set-AzureRmResource -PropertyObject $props -ResourceType Microsoft.Web/sites -ResourceName maykon -ResourceGroupName 70533

sábado, julho 22, 2017

AttributeValueMustBeUnique - Azure AD

Estava com o seguinte cenário, as contas do cliente tinham sido criadas inicialmente no Azure AD, quando isso foi implantado o cliente não tinha um domínio local ( Active Directory).
Ao tentar efetuar a sincronização estava ocorrendo o seguinte erro no Synchronization Service Manager( DirSync):

AttributeValueMustBeUnique



 Para resolver isso foi necessário alterar o ImmutableID nas contas que estavam na nuvem.
Primeiramente usei o comando ldifde (AD local) para obter o objectGuid:
>ldifde -f export.txt -r "(Userprincipalname=*)" -l "objectGuid, userPrincipalName"

Conectei no Azure AD através do PowerShell e executei o comando Set-MsolUser
>Set-MsolUser -UserPrincipalName user@contoso.com.br -ImmutableID nGc387YXXXXXX2+9UZcAw==

Onde o parâmetro ImmutableID vai receber o objectGuid obtido com o comando ldifde.
Como eram poucos usuários fiz o processo manualmente.

sábado, julho 01, 2017

ContentIndexState FailedAndSuspended - Exchange 2013

Os usuários estavam com problemas ao executar buscas no Exchange Web App e no Outlook, após análise constatei que a base de dados estava com o status de FailedAndSuspended, como pode ser observado no print abaixo:



 Para resolver esse problema executei os seguintes procedimentos (Isso é para base de dados que não fazem parte de um DAG):

Parei os seguintes serviços:

>stop-service MSExchangeFastSearch
>stop-service HostControllerService

Verifiquei a localização da base de dados do exchange com o comando abaixo:

>get-mailboxdatabase -status | select name,databasesize,EdbFilePath

Bastou renomear a pasta do index ( não tem problema em deletar essa pasta), que tem como padrão uma sequência numérica.



Após renomear as quatro pasta é necessário iniciar os serviços parados anteriormente.

>start-service MSExchangeFastSearch
>start-service HostControllerService

Depois de algumas horas verifiquei novamente e a base de dados estava com o status de Healthy:



Esse procedimento exige muito processamento, então proceda com cautela e verifique com seus usuários o melhor momento para executar esses procedimentos.

quinta-feira, junho 22, 2017

Upload para Block Blobs Azure

Depois de muito tempo sem publicar algo finalmente voltei a publicar.
Recentemente surgiu a necessidade de enviar para o Azure uma grande quantidade de dados, após analisar o ambiente do cliente configurei um Blob (Block) no Azure pois tem um ótimo custo beneficio, como o volume de dados é bem grande (40 TB) o blob se encaixa perfeitamente na necessidade do cliente.

O script é bem simples, vai pegar o conteúdo da pasta /opt/test e enviar para o container criado no Azure, esse script utiliza o Azure CLI.

 ----------
#!/bin/bash
export AZURE_STORAGE_ACCOUNT='MyStorageAccount'
export AZURE_STORAGE_ACCESS_KEY='MyKEYXXXXXXXXXXXX=='

export container_name='mycontainer'
export source_folder='opt/test'

cd /
echo pwd
for i in $(find $source_folder); do
echo "File:" $i
az storage blob upload -f $i -c $container_name -n $i
echo "---"
done
-----------

segunda-feira, novembro 21, 2016

Script PowerShell desabilitar contas de usuários

Desativa e move contas com mais de 168 dias sem acesso à rede.
import-module activedirectory
$OU_Origem="OU=Usuarios,DC=contoso,DC=local"
$OU_Destino="OU=Desligados/Desativados,DC=contoso,DC=local"
$Log="C:\LogDisable\LogDisableUsers.txt"
$data = ((Get-Date).AddDays(-168)).Date
# Limpando o Conteúdo do Arquivo.
Clear-Content $Log

# Desabilitando as Contas, ignora as unidades organizacionais que contém "SemSistema","Domains Admins" e verifica a data da criação da conta, caso tenha sido criada com menos de 168 dias não desabilita a conta.

Search-ADAccount -AccountInactive -TimeSpan 168.00:00:00 -SearchBase $OU_Origem | Get-ADUser -Properties DistinguishedName,whenCreated,distinguishedName |
Where-Object {($_.DistinguishedName -notlike "*OU=E-mail*" -and $_.DistinguishedName -notlike "*OU=SemSistema*") -and ($_.whenCreated -lt $data) -and $_.DistinguishedName -notlike "*OU=Domain Admins*"} |
ForEach-Object {
Write-host "Conta desativada: " $_.name  "Criada em: " $_.whenCreated "Origem do Objeto" $_.DistinguishedName
$_.DistinguishedName | Disable-ADAccount
$_.UserPrincipalName
Write-Output "Conta desativada: " $_.name  "Criada em: " $_.whenCreated "Origem do Objeto: " $_.DistinguishedName  "Movido para: " $OU_Destino | Out-File -Append $Log
$_.DistinguishedName | Move-ADObject -TargetPath $OU_Destino  
}

#Envia e-mail
Send-MailMessage -from data@contoso.local -to infra@contoso.local -smtpserver mail.contoso.local -Subject "Contas Desativas" -Body "Log com as contas que foram desativadas por nao estarem em uso" -Attachments "C:\LogDisable\LogDisableUsers.txt"

Script PowerShell desabilitar contas de computadores

Faz algum tempo que não faço uma publicação, vou deixar aqui um script que desabilita contas de computadores.

# Desativa computadores com mais de 186 dias de inatividade.
import-module activedirectory
$DaysInactive = 186 
$time = (Get-Date).Adddays(-($DaysInactive))
$OU_Origem="OU=Estacoes,DC=contoso,DC=com"
$OU_Destino="OU=Estacoes Desativadas,DC=contoso,DC=com"
$Log="C:\LogDisable\LogDisableComputers.txt"
# Limpando o Conteúdo do Arquivo.
Clear-Content $Log

# Desabilitando as contas
Get-ADComputer -Filter { LastLogonTimeStamp  -lt $time}  -Properties LastLogonTimeStamp -SearchBase $OU_Origem |
ForEach-Object {
Write-host "Conta desativada: " $_.name "Origem do Objeto" $_.DistinguishedName
$_.DistinguishedName | Disable-ADAccount
Write-Output "Conta desativada:" $_.name "Origem do Objeto: " $_.DistinguishedName  "Movido para: " $OU_Destino | Out-File -Append $Log
Write-Output "------------------------------------------- " | Out-File -Append $Log
$_.DistinguishedName | Move-ADObject -TargetPath $OU_Destino  
}

# Envia e-mail.
Send-MailMessage -from data@contoso.com -to infra@contoso.com -smtpserver mail.contoso.com -Subject "Contas Desativas - Computadores" -Body "Log com as contas de computadores que foram desativadas por nao estarem em uso" -Attachments "C:\LogDisable\LogDisableComputers.txt"

quarta-feira, junho 29, 2016

PowerShell cmdlets Test-netConnection

I used to use telnet client when i needed to check if determined port was open, but in Windows telnet client is not installed by default, in Windows 2012 R2 we have a cmdlets test-netconnection, this cmdlest can verify if determined is open, below an example:


If TcpTestSucceeded is true the port is open, very simple and  cool cmdlets, never more telnet client in my servers.

domingo, junho 05, 2016

DNSSEC - PowerShell

A funcionalidade do DNSSEC é muito interessante, e teve uma considerável melhora no Windows 2012 Server, abaixo os passos para a configuração do DNS seguro através do PowerShell:

Criando uma zona chamada contoso.local:
>add-dnsServerPrimaryZone -Name contoso.local -ReplicationScope Forest

Setando a zona como segura:
>Invoke-DnsServerZoneSign -ZoneName contoso.local -SignWithDefault

Verificando os registros tipos DnsKey da zona:
>Get-DnsServerResourceRecord -ZoneName contoso.local -RRType DnsKey

Distribuindo o TrustAnchor para todos os servidores DNS da floresta:
>Set-DnsServerDnsSecZoneSetting -ZoneName contoso.local -DistributeTrustAnchor DnsKey

Adicionando um registro:
>Add-DnsServerResourceRecordA -ZoneName contoso.local -Name webserv -IPv4Address 10.10.8.1

Adicionado uma nova GPO:
>New-GPO -Name NRPT -Domain contoso.local

Criando um link da GPO para o domínio:
>New-GPLink -Name NRPT -Target "DC=contoso,DC=local" -LinkEnabled Yes

Adicionando as configurações NRTP na GPO:
>Add-DnsClientNrptRule -GpoName NRPT -Namespace contoso.local -NameServers IP_DNS_Server -DnsSecEnable

Verificando as configurações:
>Get-DnsClientNrptRule -GpoName NRPT

Para testar se o servidor DNS seguro está funcionando corretamente, deve-se usar o cmdlets Resolve-DnsName:
>Resolve-DnsName -name webserv.contoso.local -DnssecOk

Referência:
https://technet.microsoft.com/en-us/library/dn593694%28v=ws.11%29.aspx




terça-feira, maio 31, 2016

Configuração DHCP PowerShell


Pequena referência de comandos em PowerShell para configuração do DHCP no Windows Server

Adicionando um Scope:
>Add-DhcpServerv4Scope -Name "ADM" -StartRange 192.168.14.10 -EndRange 192.168.14.100 -SubnetMask 255.255.255.0 -State InActive


Configurando como ativo
>Set-DhcpServerv4Scope -ScopeId 192.168.14.0 -State Active

Especificando o DNS a nível de server options.
>Set-DhcpServerv4OptionValue -DnsServer 192.168.14.251

Roteador server options.
>Set-DhcpServerv4OptionValue -Router 192.168.14.254

 Domain name.
>Set-DhcpServerv4OptionValue -DnsDomain contoso.com

domingo, maio 22, 2016

Migration Tools Windows 2012 R2

Descreverei os passos para a para a migração da Role DHCP, o ambiente é composto por duas máquinas, o servidor que terá as roles transferidas WS08R2 e o servidor de destino WS12R2

Importante: Efetuar a instalação\autorização da Role DHCP no servidor de destino.

O primeiro passo é instalar a ferramenta de migração no servidor WS12R2, com o comando: 
>Install-WindowsFeature Migration

Após a instalação executar o Windows Server Migration Tools


Importante: O caminho com a instalação das ferramentas de migração é: %windir%\System32\ServerMigrationTools

Executar o comando Get-SmigServerFeature para verificar as features instaladas no servidor de destino (WS12R2)

>Get-SmigServerFeature

Executar o comando abaixo para criar o arquivo que deverá ser transferido para o servidor WS08R2

PS C:\Windows\system32\ServerMigrationTools>.\SmigDeploy.exe /package /architecture amd64 /os WS08R2 /path D:\MigrationTools


Após transferir os arquivos para o servidor WS08R2 executar o aplicativo SmigDeploy.exe com privilegio de administrador, assim ficará disponível as ferramentas de migração.

Administrative Tools - Windows Server Migration Tools

Para o serviço DHCP Server:
>Stop-Service "DHCP Server"

Abrir o Migration Tools e executar o seguinte comando(Estou armazenado no caminho C:\TEMP):
C:\Windows\system32>Export-SmigServerSetting -featureID DHCP -Path C:\TEMP -verbose


Desautorizando servidor WS08R2
>Netsh DHCP delete server WS08R2 IP
Copiar o conteúdo exportado para o novo servidor. 

No servidor de destino W12R2 abrir o powershell e importar a Snapin:
>Add-PSSnapin Microsoft.Windows.Servermanager.Migration


Importar as configurações
>Import-SmigServerSetting -FeatureId DHCP -force -Path D:\TEMP\


Iniciar o serviço:
> start-service "DHCP Server"

Agora as configurações estarão disponíveis no novo servidor.