Crie Relatórios de Computadores do Active Directory com PowerShell. Para encontrar qualquer coisa relacionada aos objetos de computador do Active Directory (AD) e suas propriedades, vamos usar principalmente o cmdlet Get-ADComputer do PowerShell. Por exemplo, em um domínio do Active Directory, podemos usar o cmdlet Get-ADComputer do PowerShell para obter informações sobre objetos de contas de computador (servidores e estações de trabalho). Este cmdlet é um dos mais úteis para pesquisar computadores AD por vários critérios.
Este artigo discute os muitos usos do cmdlet Get-ADComputer e como podemos transformá-lo em um relatório abrangente e valioso.
Vamos começar com o artigo blog Crie Relatórios de Computadores do Active Directory com PowerShell.
Crie Relatórios de Computadores do Active Directory com o Powershell
Pré-requisitos
Se quisermos acompanhar os scripts de exemplo neste artigo, certifique-se de ter o seguinte:
- Um ambiente AD com pelo menos uma estação de trabalho associada ao domínio.
- Nível funcional do domínio – Windows Server 2016.
- Ferramentas de Administração Remota do Servidor (RSAT) para Active Directory instaladas na sua estação de trabalho associada ao domínio.
- A versão mais recentePowerShell ou, pelo menos,PowerShell 7.x e superior, é necessário para executar os scripts.
Bem, como criar relatórios de computadores do Active Directory com PowerShell? Vamos descobrir.
Compreensão do comando PowerShell Get-ADComputer
Antes de começarmos, devemos familiarizarmos-nos com o comando Get-ADComputer. Não precisamos de privilégios de admin de domínio para obter informações de Active Directory. Usando uma conta de usuário regular membro do grupo Domain Users ou Authenticated Users é suficiente.
Bem, o comando Get-Help, como de costume, fornece uma lista de todos os outros parâmetros para o cmdlet Get-ADComputer:
$command = Get-ADComputer
Get-Help $command
Saída de exemplo:
Alternativamente, podemos acessar a documentação oficial do comando Get-ADComputer aqui.
Após percorrer a longa lista de parâmetros em nossa linha de comando e documentação, podemos começar a criar scripts. Lembre-se, o parâmetro mais crucial que acompanha o comando Get-ADComputer é o Identity parâmetro.
Para obter informações sobre uma conta de computador específica no domínio, use o parâmetro -Identidade com seu nome como argumento:
Get-ADComputer -Identity DC01
Aqui está a saída de exemplo:
DistinguishedName : CN=DC01,OU=Servers,OU=DC,OU=IT,DC=infrasos,DC=com
DNSHostName : DC01.infrasos.com
Enabled : True
Name : DC01
ObjectClass : computer
ObjectGUID : 87654321-1204-5578-0000-123462341264
SamAccountName : DC01
SID : S-1-5-21-123656780-1234667890-0986654321-1264
Como resultado, o Get-ADComputer cmdlet retornou apenas as propriedades fundamentais do objeto Computador do AD. No entanto, executar o comando acima fornece apenas informações de nível superior sobre o objeto do computador. Em seguida, se quisermos mergulhar mais fundo e exibir as propriedades disponíveis do objeto, podemos usar o -Propriedades parâmetro.
Para listar todas as propriedades do objeto, adicione o parâmetro -Propriedades e adicione um valor de asterisco (*). O valor de asterisco é o valor de curinga que indica TODAS:
Get-ADComputer -Identity DC01 -Properties *
Saída de exemplo:
Por outro lado, podemos navegar dentro do console Active Directory Users and Computers (ou dsa.msc) e visualizar as propriedades de lá. Por fim, selecione um objeto de computador e navegue até a guia Editor de Atributos para visualizar a lista de propriedades do objeto de computador.
Filtrando os Resultados de Get-ADComputer
Um inconveniente é que podemos exibir mais informações sobre coisas que não necessariamente precisamos. Usando o pipeline do PowerShell, o cmdlet Get-ADComputer nos permite exibir propriedades específicas do computador na linha de comando. Por exemplo, podemos deixar apenas os valores das propriedades Name e LastLogonDate na saída, encadeando o comando Format-Table à sintaxe principal:
Get-ADComputer -Identity DC01 -Properties * | Format-Table Name, LastLogonDate -Autosize
Saída de exemplo:
Aqui, o Windows PowerShell calcula as larguras das colunas com base nos dados reais exibidos se especificarmos o parâmetro AutoSize quando executamos o comando Format-Table. No geral, esse parâmetro torna as colunas legíveis.
No entanto, o comando anterior pesquisa apenas um objeto de computador AD único. Portanto, se quiséssemos informações para todos os computadores no domínio, podemos substituir o Identidade parâmetro com Filtro:
Get-ADComputer -Filter * -Properties * | Format-Table Name, Created -Autosize
Veja a saída de exemplo:
Recebemos uma tabela formatada simples contendo apenas dois campos: o nome do computador e a data de criação do objeto. Podemos adicionar outras colunas do objeto Computador do AD a esta tabela adicionando propriedades na seção Format-Table do pipeline.
Basicamente, para buscar informações sobre os objetos de computador em uma Organização Particular Organizational Unit (OU), podemos usar o –SearchBase parâmetro:
Get-ADComputer -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Filter * -Properties * | Format-Table Name, Created -Autosize
Além disso, também podemos classificar os resultados da consulta inserindo o Sort-Objectcmdlet no pipeline: .
Get-ADComputer -Filter * -Properties * | Sort-Object Created | Format-Table Name, Created -Autosize
No comando anterior, o comando Sort-Object classifica os resultados do Get-ADComputer primeiro por Created e, em seguida, passa para o Format-Table para exibição.
Usando filtros de pesquisa com o Get-ADComputer
Usamos o Get-ADComputer cmdlet com o -Filter argumento para pesquisar vários computadores AD com base em critérios específicos. Como observado, podemos usar curingas e operadores de comparação lógica neste caso. Certamente, como filtros, só podemos usar atributos primários de objetos de computador.
Da mesma forma, usamos o pipeline Where-Object se precisarmos aplicar filtros de pesquisa em atributos de computador estendidos. Os seguintes são exemplos mais práticos de como consultar e pesquisar objetos de computador no domínio usando oGet-ADComputercmdlet.
Obtenha o número total de todos os computadores ativos e não bloqueados no Active Directory:
Pesquisamos computadores usando múltiplos filtros ao mesmo tempo. Use operadores lógicos do PowerShell logical comparison operators para realizar isso.
(Get-ADComputer -Filter {Enabled -eq "true"}).Count
Exibir todos os hosts do Windows Server no domínio AD:
Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*' }
Obtenha uma lista de todos os computadores em um determinado OU cujos nomes começam com DC:
Get-ADComputer -Filter {Name -like "DC*"} -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Properties * | Format-Table Name
Ao pesquisar na OU, podemos usar o –SearchScope1 parâmetro para limitar nossa pesquisa apenas à raiz da OU. A -SearchScope2 opção executa uma pesquisa recursiva de computadores em todas as OUs.
Gerenciando Múltiplos Computadores com Get-ADComputer
Devemos usar o Foreach-Object loop para executar uma ação específica em todos os computadores na lista resultante. Neste exemplo, podemos consultar vários computadores do AD remotamente usando Windows Management Instrumentation ou Common Information Classes:
Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Foreach-Object {
Get-CimInstance Win32_Bios -ComputerName $_.Name -ErrorAction SilentlyContinue |
Select-Object PSComputerName
}
Evidentemente, neste exemplo, se quisermos uma lista de hosts do Windows Server no domínio, juntamente com seu modelo e fabricante, usamos o mesmo método de loop e buscamos as propriedades do computador.
$Computers = Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*'}
Foreach ($Computer in $Computers){
$Hostname = $Computer.Name
$ComputerInfo = (Get-WmiObject -Computername $Hostname Win32_ComputerSystem)
$Manufacturer = $Computer.Manufacturer
$Model = $Computer.Model
Write-Output "Name: $Hostname"
Write-Output "Manufacturer: $Manufacturer"
Write-Output "Model: $Model"
Write-Output " "
}
Então, as informações obtidas dos exemplos acima estão prontamente disponíveis através dos serviços de domínio já que esses computadores fazem parte do AD. No entanto, nem todos os computadores têm suas propriedades divulgadas para o domínio. Como podemos obtê-las?
A seguir, fazemos uso do Invoke-Command. Portanto, este cmdlet do PowerShell executa comandos locais em computadores remotos. Por exemplo, suponha que precisemos executar um comando específico em todos os computadores em uma determinada OU. Neste exemplo, vamos usar o Invoke-Command para executar um comando de atualização de política de grupo em todos os servidores:
Get-ADComputer -SearchBase "OU=DC,DC=infrasos,DC=com" -Filter * |
%{ Invoke-Command -Computer $_.Name -ScriptBlock { gpupdate /force } }
Gere Relatórios do AD do PowerShell com Get-ADComputer
No Windows PowerShell, exportamos a saída de nossos comandos em vários formatos de relatório. Aqui estão alguns exemplos abaixo.
Primeiro, exportamos o resultado do comando Get-ADComputer para um arquivo de texto:
Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2019*' } -Properties * |
Select Name, OperatingSystem |
Format-Table -AutoSize C:\Temp\2019_servers.txt
Em segundo lugar, também obtemos uma lista de todos os computadores e a exportamos para um arquivo de valor separado por vírgulas(CSV):
Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Export-CSV All-Computers.csv -NoTypeInformation
Em terceiro lugar, também podemos exportar nosso relatório e obter um formato de página da web HTML com uma lista de todos os computadores e propriedades essenciais:
Get-ADComputer -Filter * -Properties * |
Select-Object Name,OperatingSystem |
ConvertTo-Html |
Out-File C:\ps\ad_all_computers.html
Deve se parecer com algo assim:
Obrigado por ler Criar Relatórios de Computadores do Active Directory com o PowerShell. Vamos concluir.
Leia também Implantar Monitoramento do Azure AD
Conclusão da Criação de Relatórios de Computadores do Active Directory Usando o Powershell
Neste artigo, discutimos o comando Get-ADComputer de forma abrangente. Aprendemos que com este comando, podemos obter uma lista detalhada de propriedades e informações para uma máquina específica. Além disso, com uma lista exaustiva, aprendemos como filtrar essas propriedades apenas para buscar as informações que precisamos.
Resumindo, também aprendemos como transformar uma consulta cmdlet em um comando mais útil que podemos usar para passar comandos remotamente. Por fim, agora podemos gerar nossos relatórios em vários formatos com todas essas informações absorvidas.
Source:
https://infrasos.com/create-active-directory-computer-reports-with-powershell/