Display information about the image:
>Dism /Get-ImageInfo /ImageFile:C:\dism\install.wim
Mount an image:
>Dism /Mount-image /ImageFile:C:\dism\install.wim /index:2 /MountDir:C:\test
Display information about mounted image
>Dism /Get-MountedImageInfo
Unmount image and descart alterations
>Dism /Unmount-image /MountDir:c:\test /Discard
List of 3rd party drivers
>Dism /image:C:\test\ /Get-Drivers
Unmount image and descart alterations
>Dism /Unmount-image /MountDir:c:\test /Discard
Unmount image and commit the changes
>Dism /Unmount-Image /MountDir:C:\test\ /Commit
List all of the features avaliable
>Dism /Image:C:\test\ /Get-Features
Get information about feature
>Dism /Image:C:\test\ /Get-FeatureInfo /Featurename:DirectoryServices-DomainController
Enable Windows feature
>Dism /Image:C:\test\ /Enable-Feature /FeatureName:DirectoryServices-DomainController /All
quinta-feira, maio 17, 2018
domingo, maio 13, 2018
Install Nano Server - Quick Reference
Copy NanoServer folder from the installation media to your computer.
In my computer i copy to C:\NanoServer
Open PowerShell and go to the C:\NanoServer
Import the NanoServerImageGenerator module.
>Import-Module .\NanoServerImageGenerator -Verbose
Create a new image with the command:
>New-NanoServerImage -Edition Standard -DeploymentType Guest -MediaPath E:\ -BasePath .\ -TargetPath C:\Hyper-V\NanoSvr1\NanoSvr.vhdx -ComputerName NanoSvr1
-MediaPath = Media installation Windows Server 2016
Create a new VM and use an existent vhdx:
>new-vm -Name "NanoSRV01" -MemoryStartupBytes 1GB -VHDPath C:\Hyper-V\NanoSvr1\NanoSvr.vhdx -Generation 2
Now you can management your Nano Server!
In my computer i copy to C:\NanoServer
Open PowerShell and go to the C:\NanoServer
Import the NanoServerImageGenerator module.
>Import-Module .\NanoServerImageGenerator -Verbose
Create a new image with the command:
>New-NanoServerImage -Edition Standard -DeploymentType Guest -MediaPath E:\ -BasePath .\ -TargetPath C:\Hyper-V\NanoSvr1\NanoSvr.vhdx -ComputerName NanoSvr1
-MediaPath = Media installation Windows Server 2016
Create a new VM and use an existent vhdx:
>new-vm -Name "NanoSRV01" -MemoryStartupBytes 1GB -VHDPath C:\Hyper-V\NanoSvr1\NanoSvr.vhdx -Generation 2
Now you can management your Nano Server!
sexta-feira, janeiro 26, 2018
Consulta SQL
Recentemente surgiu a necessidade de descobrir quais foram os registros alterados em uma base de dados. O que ocorreu é que após uma alteração em um determinado sistema o mesmo ficou indisponível, a maneira que eu encontrei foi alterar o registro na base de dados, para isso consultei os últimos registros alterados na base de dados, utilizei o comando abaixo:
SELECT OBJECT_NAME(OBJECT_ID) AS TableName, last_user_update FROM sys.dm_db_index_usage_stats WHERE database_id = DB_ID( 'DATABASE') order by last_user_update
Fonte: https://stackoverflow.com
SELECT OBJECT_NAME(OBJECT_ID) AS TableName, last_user_update FROM sys.dm_db_index_usage_stats WHERE database_id = DB_ID( 'DATABASE') order by last_user_update
Fonte: https://stackoverflow.com
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
>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):
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.
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
-----------
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"
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"
# 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.
Assinar:
Postagens (Atom)
