Caso previra, nosso script mais atualizado está disponível em Get-Hardware of Computers in a OU.ps1. Abra o o PowerShell ISE, com uma conta que tenha permissão de leitura no Active Directory e permissão de administrador nos desktops. Coloque o seguinte código, alterando a parte em cinza pelo distinguished name da unidade organizacional que você deseja (caso não saiba Como obter o distinguished name, leia nosso Post sobre esse assunto):
#-----------------------------------------------------------------------------------
#$Lista = $null
$SEARCH_OU="OU=Nome_da_OU,DC=seu_dominio,DC=com,DC=br"
#-----------------------------------------------------------------------------------
$ErrorActionPreference= 'silentlycontinue'
$Sleep=10
$namespace = "root\CIMV2"
$DaysInactive = 90
$time = (Get-Date).Adddays(-($DaysInactive))
$KeysArray = @()
If (! $Lista) {
$Lista = (Get-ADComputer -Filter {LastLogonTimeStamp -gt $time} -Searchbase $SEARCH_OU).Name
}
$Lista | ForEach-Object {
$Name = "localhost"
$Name = $_
$IPAddress = $null
$IPAddress = (Resolve-DnsName -type A $Name).IPAddress
write-host "$Name ($IPAddress)" -NoNewline
If ($IPAddress)
{
If (Test-Connection -ComputerName $Name -Count 1 -ErrorAction SilentlyContinue)
{
$ComputerSystem = gwmi Win32_ComputerSystem -ComputerName $IPAddress
$ComputerModel = $null
$ComputerModel = $ComputerSystem.Model
$ComputerName = $null
$ComputerName = $ComputerSystem.Name
$ComputerManufacturer = $null
$ComputerManufacturer = $ComputerSystem.Manufacturer
$Processor = gwmi win32_processor -ComputerName $IPAddress | Select Name
$ProcessorName = $Processor.Name
$ProcessorName = $ProcessorName.Replace("Intel(R)","").Replace("Core(TM)","").Replace("CPU","").Replace(" ","").Replace("-"," ").Split("@")[0]
#---
$Bios = gwmi win32_bios -ComputerName $IPAddress
$Serialnumber = $Bios.serialnumber
$BiosManufacturer = $Bios.version
#---
$User = $null
$User = (query user /server:$Name | select -Skip 1).split(" ")[1]
#---
$Disks = gwmi Win32_diskdrive -ComputerName $IPAddress | select model
$DiskModels = $Disks.model -join ";"
#---
$operatingsystem = gwmi win32_operatingsystem -ComputerName $IPAddress | select TotalVisibleMemorySize,FreePhysicalMemory,Version
$operatingsystemVersion = $operatingsystem.Version
$Memory = [math]::Round((($operatingsystem.TotalVisibleMemorySize) / 1024)/ 1024)
If ($Memory -eq 0) {$Memory = $null}
#---
If ( ($ComputerSystem) -or ($Processor) -or ($Bios) -or ($Disks) -or ($operatingsystem) )
{
$KeyData = $null
$KeyData = New-Object PSObject
$KeyData | Add-Member -MemberType NoteProperty -Name "User" -Value "$User"
$KeyData | Add-Member -MemberType NoteProperty -Name "Name" -Value "$Name"
$KeyData | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value "$ComputerName"
$KeyData | Add-Member -MemberType NoteProperty -Name "ComputerModel" -Value "$ComputerModel"
$KeyData | Add-Member -MemberType NoteProperty -Name "BiosManufacturer" -Value "$BiosManufacturer"
$KeyData | Add-Member -MemberType NoteProperty -Name "ProcessorName" -Value "$ProcessorName"
$KeyData | Add-Member -MemberType NoteProperty -Name "Memory" -Value "$Memory"
$KeyData | Add-Member -MemberType NoteProperty -Name "DiskModels" -Value "$DiskModels"
$KeyData | Add-Member -MemberType NoteProperty -Name "operatingsystemVersion" -Value "$operatingsystemVersion"
$KeyData | Add-Member -MemberType NoteProperty -Name "Serialnumber" -Value "$Serialnumber"
$KeysArray += $KeyData
}
write-host " - OK" -ForegroundColor Green
$KeyData
write-host "------------------------------------------------------------------------"
$Lista = $Lista | Where-Object { $_ -ne $Name }
}
Else
{
write-host " - Sem acesso" -ForegroundColor Red
write-host "------------------------------------------------------------------------"
}
}
Else
{
write-host " - Sem IP" -ForegroundColor Red
write-host "------------------------------------------------------------------------"
}
}
#$KeysArray | Export-Csv -NoTypeInformation -Encoding UTF8 -Delimiter ';' "C:\Temp\Inventory.csv"
$KeysArray | ft
Execute o código e obtenha a lista.
Fontes/Referências
NVLAN – Como obter o Distinguished Name (DN) no Active Directory
NVLAN – Criar uma variável com colunas no PowerShell
https://community.spiceworks.com/t/powershell-script-to-get-machines-serial-number-with-computer-name/835442
https://learn.microsoft.com/en-us/archive/technet-wiki/52273.active-directory-how-to-find-inactive-computers-in
Mais Informações
Esperamos ter te ajudado e estaremos sempre a disposição para mais informações.
Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.
