Conheça o PowerShell DSC

PowerShell

Fala Pessoal, tudo bem com vocês? Hoje irei falar sobre PowerShell DSC. Já ouviu falar? Não sei se você curte fazer a mesma coisa varias vezes, particularmente, eu não gosto rsrs

O PowerShell DSC, é uma plataforma no qual permite que você gerencie sua infraestrutura como um código. Vou te falar um exemplo… você tem uma documentação de um servidor em um arquivo World, com um passo a passo de como instalar ou configurar determinado servidor.

Com o PowerShell DSC, posso criar uma documentação em código, no qual irá realizar o deploy desse servidor ou garantir que o mesmo está com as mesmas configurações que foram realizadas.

Você pode garantir que tal serviço esteja com o status de running, ou tal serviço esteja desabilitado. Ahh e esqueci de comentar que também tem no Azure rsrs

Conceitos Principais

A DSC é uma plataforma declarativa usada para configuração, implantação e gerenciamento de sistemas. Consiste em três componentes principais:

Configurações são scripts declarativos do PowerShell que definem e configuram instâncias de recursos. Após executar a configuração, a DSC (e os recursos que estão sendo chamados pela configuração) vai simplesmente “realizar”, garantindo que o sistema exista no estado disposto pela configuração. As configurações da DSC também são idempotentes: o Gerenciador de Configurações Local (LCM) continuará garantindo que os computadores sejam configurados no estado declarado pela configuração.

Os recursos são a parte de “realização” da DSC. Eles contêm o código que definem e mantêm o destino de uma configuração no estado especificado. Os recursos residem dentro de módulos do PowerShell e podem ser escritos para modelar algo tão genérico quanto um arquivo ou um processo do Windows ou tão específico quanto um servidor IIS ou em uma VM em execução no Azure.

Gerenciador de Configurações Local (LCM) é o mecanismo pelo qual a DSC facilita a interação entre recursos e configurações. Regularmente, o LCM sonda o sistema usando o fluxo de controle implementado pelos recursos para garantir que o estado definido por uma Configuração seja mantido. Se o sistema estiver sem estado, o LCM fará chamadas para o código nos recursos para “realizar”, de acordo com a configuração.

Fonte: https://docs.microsoft.com/pt-br/powershell/scripting/dsc/overview/overview?view=powershell-7.1

Aqui irei deixar um link, se você tiver interesse, irei postar mais sobre isso, e também irei colocar no meu Github.

Por quê aprender a criar scripts em PowerShell?

PowerShell

Fala pessoal, tudo bem com vocês? No post de hoje irei falar um pouco sobre o por quê de aprender a criar scripts em PowerShell.

Recentemente fiz um post falando sobre automatização com PowerShell, e hoje irei falar sobre criar scripts. Antes de começar tenho que te falar algo que talvez não seja tão legal rsrs, é fácil ? Não! Mas vai te ajudar demais profissionalmente e também e poupar tempo no seu trabalho.

Eu particularmente não gosto de realizar tarefas que sejam repetitivas e que são fáceis de realizar, então sempre tento criar alguma maneira de automatizar isso. Com PowerShell consigo realizar diversas tarefas, em vários computadores, servidores, usuários e etc.

Vamos usar um cenário simples onde aprender a criar scripts ou aprender o básico do PowerShell iria te ajudar muito…. Seu gerente lhe pede um relatório com os usuários que não fazem Logon a 100 dias… e seu ambiente tem 1300 usuários, como você faria par pegar esses usuários ? PowerShell. Em um script você poderia criar em HTML um arquivo formatado, com fontes, cores e mais diversas coisas… Mas também você teria que ter conhecimentos em HTML. Você também poderia criar um script simples onde criasse um arquivo CSV, e no Excel você iria formatar da forma que deseja-se.

Um outro cenário, você tem uma tarefa rotineira e cria um script para realizar ela por você… Se você sair de férias um outro membro da sua equipe poderia rodar esse script, e realizar a mesma tarefa.

Que tal receber por e-mail uma tarefa que você executa diariamente ou semanalmente ? Novamente… PowerShell.

Quando você começar a ver o poder que o PowerShell tem, você sempre irá querer buscar mais e mais.

Por onde começar ? Comece pelo básico, entendo as funções, os módulos e principalmente a logica também é muito importante. Comece anotando suas atividades e procurando uma maneira de criar um script para isso.

Também existe diversos scripts prontos, mas aconselho que verifique todo o script caso vá usa-lo e entenda o que cada linha está fazendo.

Paulo e cursos? Eu particularmente sou apaixonado pela PluralSight e recomendo muito. Mas também tem diversos vídeos no Youtube e cursos da Udemy. Irei deixar aqui no fim um Link do curso de PowerShell do grande Daniel Donda, que irá lhe da uma base e caminhos para isso.

E como falei no primeiro post sobre automação com PowerShell, crie um ambiente de laboratório e deixe sua imaginação fluir rsrs Muitos erros em vermelho irão acontecer no começo, mas isso é parte do aprendizado, não se desanime por isso, errar faz parte do processo para você evoluir.

Um grande abraço, e bons estudos.

Curso PowerShell :

https://www.udemy.com/course/aprenda-powershell-do-zero/

Documentação:

https://docs.microsoft.com/pt-br/powershell/scripting/overview?view=powershell-7.1

Automatização de tarefas com PowerShell Introdução

Microsoft, PowerShell

Fala pessoal, tudo bem com vocês? Hoje irei falar um pouco sobre como automatizar tarefas com o PowerShell.

Antes de tudo, recomendo que você tenha conhecimento básico sobre PowerShell, pois para começar as automatizações você precisa do básico.

Quando falo em automação, irei abordar aqui sobre scripts, e não sobre funções etc. Eu particularmente prefiro criar meus scripts no PowerShell ISE, mas você pode ficar à vontade para usar a ferramenta que você se sentir mais à vontade.

Irei deixar no final do artigo um Link para meu Github, onde irei começar a compartilhar scripts que uso.

Vamos começar?

Por padrão, quando você executa pela primeira vez um script de PowerShell ele será bloqueado por padrão. Um exemplo de arquivo seria o .ps1

Vamos verificar como está a política de execução de scripts no PowerShell.

Modos:

  • Restricted (Com essa configuração, você não vai conseguir rodas scripts);
  • Unrestricted (Com essa configuração, seria meio que dizer não ligue para de onde veio o script, simplesmente rode rsrs… Recomendo que você use essa configuração);
  • RemoteSigned (Com essa configuração, os scripts criados localmente, ou com uma assinatura digital, serão executados);
  • AllSignet (Com essa configuração, basicamente só será liberado scripts que forem assinados digitalmente com um certo tipo de certificado. Ainda tem mais algumas configurações que irei deixar um KB da Microsoft sobre isso);
  • ByPass (Com essa configuração, você meio que fala para o Powershell não se preocupar rsrs, ela é usada por usuários mais avançados).

Para verificarmos qual configuração estamos no momento iremos digitar no PowerShell (abrir como adm):

Get-ExecutionPolicy

No meu caso, Restricted. Irei alterar para RemoteSigned. Para realizar essa alteração digite:

Set- ExecutionPolicy RemoteSigned

Ao realizar essa configuração, irá aparecer o seguinte aviso

Ao tentar realizar sem abrir como administrador, ele irá mostrar o seguinte erro.

Como administrador

Com essas configurações, vamos começar a criar um script bem básico, e rodar ele.

O script que irei mostrar, é algo muito básico, mas que pode ajudar você de uma forma simples, encontrar quem desligou/reiniciou o computador/servidor.

No PowerShell ISE, irei criar o seguinte arquivo ps1.

Get-EventLog -LogName System | Where EventID -eq 1074 

E irei salvar como Log Desligamento.ps1

Agora iremos abrir o nosso PowerShell como administrador e executar o script.

Aqui estão os Logs de uma forma bem mais rápida.

Agora iremos criar um script, para pegar todos os usuários do domínio, que estão com a senha para nunca expirar.

Nesse script iremos digitar:

Search-ADAccount -PasswordNeverExpires -UsersOnly

Vamos salvar, você pode colocar o nome que você desejar…

Esse script, ele precisa ter o modulo de Active Directory, se estiver usando o Windows 10 você precisa instalar o RSAT.

E Aqui está o retorno do nosso script.

Irei finalizar por aqui, mas recomendo que você crie um ambiente de laboratório e deixe sua imaginação fluir para criar scripts para automatizar algumas tarefas.

Você também pode procurar scripts prontos, ou modificados para sua necessidade.

Link Github: https://github.com/paulocostatipe/PowerShell

Documentação sobre as políticas: https://docs.microsoft.com/pt-br/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.1

Como descobrir em qual servidor uma determinada GPO foi criada via PowerShell

GPO, PowerShell

Fala pessoal, tudo bem com vocês? Hoje resolvi escrever uma dica, no qual já vi vários técnicos e analistas com dificuldades para encontrar em qual servidor uma determinada GPO foi criada.

Digamos, que você tenha um ambiente com 8 servidores de AD, e vários administradores que criam GPO no seu ambiente. Como saber em qual servidor foi criada uma determinada GPO?

Para realizar esse procedimento iremos precisar da GUID da GPO, que irei mostrar mais abaixo como encontrá-la.

Um outro exemplo, no qual você pode usar esse procedimento, seria quando você realizada um gpupdate /force e encontramos um erro que uma GPO não foi aplicada por algum motivo, que pode ser por exemplo um problema de replicação entre os servidores.

Vamos para o que interessa? Rsrs

Primeiro iremos abrir a console do Group Policy Manegement. Nesse exemplo irei usar uma GPO que já conheço o nome, mas não sei em qual servidor ela foi criada.

Irei clicar na GPO, e irei em Details para pegar o GUID dessa GPO.

Iremos pegar o valor Unique ID, com esse valor agora iremos abrir o PowerShell e executar um comando.

repadmin /showmeta "cn={GUID DA GPO },cn=policies,cn=system,dc =seudominio,dc=local"

No meu caso, ficaria dessa forma:

Aqui usei o PowerShell ISE

Depois de rodar esse comando, obtive a seguinte tela:

Retirei uma grande parte de informações nesse print, porem o comando irá trazer bem mais informações.

Espero que essa dica ajude, até a próxima.

4 Dicas para buscar informações no AD com PowerShell

PowerShell, Windows Server

Fala pessoal, tudo certo com vocês?

Hoje irei falar um pouco sobre PowerShell e GPO, e alguns comando que uso no meu dia a dia, que podem ajudar a vocês, a ter um processo mais automatizado para algumas coisas. Já vi pessoas por exemplo, entrando em usuário por usuário para verificar se a conta estava com a senha para nunca expirar, ou tirar um relatório de contas bloqueadas..

Hoje irei deixar 4 dicas, de comandos que você pode precisar usar, e vai economizar muito tempo do seu trabalho.

Eu particularmente, sempre gosto de usar o PowerShell ISE, para realizar algumas tarefas.

Vamos para 1ª dica, bem simples e que pode ajudar você a saber se seu ambiente está em compliance com suas diretivas na empresa.

Dica 1:

Como identificar via Powershell contas que estão marcadas para a senha nunca expirar? (Lembrando do meu post passado, isso não é uma boa pratica ter contas com senhas que nunca expiram…)

Com o PowerShell ISE ou Powershell, no seu AD, execute o seguinte comando:

Search-ADAccount -PasswordNeverExpires -UsersOnly

Esse comando retornara para você todos usuários que estão com a senha para nunca expirar, automatizando seu trabalho e trazendo esses dados em segundos rsrs.

Dica 2:

E como verificamos quais contas estão expiradas? Bem simples também, iremos mudar apenas 1 coisinha.

Search-ADAccount -AccountExpired  -UsersOnly

Esse comando retornara todas as contas expiradas, bem mais simples que procurar uma por uma né? rsrs

Dica 3:

E como verificar quais contas estão bloqueadas? O comando é praticamente o mesmo, mudando apenas um parâmetro

Search-ADAccount -LockedOut -UsersOnly

Esse comando retornara todas as contas bloqueadas, facilitando seu trabalho 😀

Dica 4:

Como verificar quais contas estão desabilitadas rsrs

Search-ADAccount -AccountInactive -UsersOnly

Com esse comando, iremos verificar todas as contas desabilitadas.

Além desses comandos, que coloquei de uma forma mais simples, existe diversos outros parâmetros que você pode usar, como por exemplo, exportar para um arquivo HTML, ou realizar alguns filtros para aparecer só o nome, dentre vários outros. Irei deixar a documentação da Microsoft, no qual irá mostrar com mais detalhes esses comandos.

Eu gosto de usar bastante o Format-Table nos comandos e em scripts, irei deixar também a documentação dele.

Search-ADAccount (Documentação)

https://docs.microsoft.com/en-us/powershell/module/activedirectory/search-adaccount?view=windowsserver2019-ps

Format-Table (Documentação)

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/format-table?view=powershell-7.1

Upgrade Windows Server 2019 Evaluation para Standard

Microsoft, PowerShell

Fala pessoal, hoje irei mostrar como realizei o upgrade de uma versão de avaliação do Windows Server 2019 para a versão Standard.

Para iniciar, iremos abrir o nosso querido PowerShell como administrador e digitar o seguinte comando:

DISM /Online /Set-Edition:ServerStandard /ProductKey:CHAVEDOPRODUTO /AcceptEula

Esta imagem possuí um atributo alt vazio; O nome do arquivo é image.png

Apos completar o upgrade de versão, será solicitado para reiniciar o servidor.

Digite (Y) para reiniciar.

Pronto, o nosso servidor foi migrado de versão.

Você pode migrar para Datacenter também, verifique as opções que estão disponíveis com:

DISM /online /Get-TargetEditions

Alterando atributos em massa no Active Directory com PowerShell

Microsoft, PowerShell

Alterando atributos no Active Directory com PowerShell

Fala pessoal, no post de hoje irei falar um pouco de como realizar alterações em massa no Active Directory usando o Powershell.

Antes de começar, vamos um falar brevemente o motivo que eu iria usar o Powershell para modificar campos no Active Directory. Imagina o seguinte cenário, uma filial da sua empresa que tem 100 contas de usuário mudou de endereço, e você precisar modificar o CEP nos usuários do AD, 1 ou 5 contas tudo bem, isso seria bem rápido via GUI, agora já imaginou 100, 1000 ou bem mais? Rsrs Aqui vou fazer uma demonstração bem básica, mas você pode ficar à vontade para incrementar e modificar de acordo com sua necessidade. Vamos começar?

1º Vamos abrir o PowerShell ISE como administrador.

Para realizar os próximos procedimentos você precisa do modulo do Active Directory instalado no seu computador, ou realizar o processo dentro de um servidor de AD.

Uma coisa que eu sempre faço é verificar os campos do objeto para verificar o que posso alterar. Para fazer isso eu uso o comando:

Get-ADuser usuário -propiertes *

Segue o exemplo:

Com isso, eu posso buscar o que eu desejo alterar e montar o meu código.

Com as propriedades em mão, vamos começar escrever nosso código.

Agora precisamos da OU no qual iremos realizar essa alteração dos usuários, você também poderia realizar apenas para 1 usuário, mas nesse exemplo irei fazer para todos os usuários de uma OU.

No meu ambiente irei escolher o departamento de Vendas de Recife, adicionar/alterar a propriedade Description.

Irei definir a seguinte informação “Usuário do departamento de Vendas da Unidade Recife”

Vou usar o seguinte código para verificar se o mesmo traz as informações dos usuários de Vendas:

Get-ADUser -Filter * -SearchBase "OU=Usuarios,OU=VENDAS,OU=Recife,DC=paulocostati,DC=com" | Format-Table name

Obs. Altere “OU=USUARIOS…” Para a OU que você deseja. Adicionei o Fomart-Table name no final para retornar apenas os nomes.

Agora iremos adicionar ao nosso código nossa alteração.

Get-ADUser -Filter * -SearchBase "OU=Usuarios,OU=VENDAS,OU=Recife,DC=paulocostati,DC=com" | Set-ADUser -Description "Usuário do departamento de Vendas da Unidade Recife”

Agora iremos verificar se as alterações foram realizadas, você pode olhar tanto por interface gráfica ou powershell.

Vamos continuar com o powershell… Digite o seguinte comando para verificar:

Get-ADUser -Filter * -SearchBase "OU=Usuarios,OU=VENDAS,OU=Recife,DC=paulocostati,DC=com" -Properties name,Description

Aqui verificamos que nossa alteração foi realizada com sucesso.

Aqui finalizo como alterar os campos em massa via PowerShell.

Como realizar download de imagem via Powershell

Microsoft, PowerShell

Recentemente, vi uma demanda na technet, onde um usuário informou que as imagens no qual ele usa como wallpaper via GPO, seria necessário realizar o download e troca do arquivo por uma URL.

Para isso, realizei um script em powershell para atender essa necessidade.

O script dividi em algumas partes, onde você pode alterar de acordo com sua necessidade. Ele pode ser usado para outros fins, não apenas para a troca do wallpaper.

Segue o script.



##Renomear o arquivo caso deseje
 com a data da modificação.                     
Rename-Item -path c:\imagem\wallpaper.jpg -NewName "wallpaper-old $(Get-Date -Format yyyy-MM-dd).jpg"
##Excluir o arquivo 
Remove-Item -Path C:\imagem\wallpaper.jpg -Force ##-force opcional


##Fazer Download
##Alterar variável $url
$url = "https://url.com/imagem.jpg"
$download = New-Object System.Net.WebClient
$download.DownloadFile($url, "C:\imagem\wallpaper.jpg")
Realizando o teste baixando a imagem
Imagem baixada.
Renomeando o arquivo com a data.
Arquivo renomeado.

Como verificar KBs instalados via PowerShell

Microsoft, PowerShell

Para realizarmos esse procedimento, iremos usar o powershell.

1º Abra o powershell

2º Use o seguinte comando:

Estou colocando | fl Description, HotFixID para trazer apenas essas informações. Você pode retirar essa parte caso queira mais informações.

Get-CimInstance -ClassName Win32_QuickFixEngineering | fl Description, HotFixID

Você também pode usar o codigo:

Get-Hotfix -id KBXXXXXXX

Para verificar um Hotfix especifico.

Verificar o último logon de usuário via PowerShell

Microsoft, PowerShell

Para verificar o ultimo logon ou outras propriedades de um usuário se conecte no Active Directory ou instale o modulo de Active Directory para powershell no seu computador.

1º Conecte no seu servidor Active Directory (AD)

2º Abra o Powershell, você pode buscar no menu iniciar ou abrir com tecla de Windows + R

Digite Powershell

3º No Powershell digite o seguinte codigo:

Get-ADUser -Identity usuario -Properties “LastLogonDate” | fl name, LastLogonDate

No lugar de usuário altere para o usuário que você deseja.

Você também pode retirar o | fl name, LastLogonDate para verificar mais propriedades.