Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Coletar o hash de hardware Automatizado

O script abaixo é utilizado para coletar o hash de hardware para registrar o equipamento no Windows Autopilot. O script faz a coleta por meio da exportação na opção "Acessar trabalho ou escola" nas configurações do Windows. Ele criará um arquivo CSV contendo o hash de hardware e o salvará no diretório especificado. O arquivo CSV gerado será utilizado para fazer a importação no Intune e registrar o dispositivo no perfil do Autopilot.


Instruções de execução


Para executar o script corretamente, siga as instruções abaixo:


1. Abra o PowerShell.


<# 
======================================================================================
Nome: Get-HashdeHardware.ps1
Autor: Ricardo da Silva Oliveira
Data : 04/06/2024
Descrição: Este script é utilizado para coletar o hash de hardware por meio da
exportação na opção que fica em Configurações, Contas, Acessar trabalho ou escola.
No final, será gerado um arquivo com o nome 'DeviceHash_$computerName.csv' que será
utilizado para registrar o equipamento no Windows Autopilot.

Nota: Existe uma outra alternativa para coletar o Hash de Hardware, veja a documentação
no link: https://learn.microsoft.com/pt-br/autopilot/add-devices#powershell
======================================================================================
#>

$data=Get-Date -Format "dd/MM/yy-HH:mm"
$filedata=Get-Date -Format "dd-MM-yy"

# Define os valores iniciais das variáveis globais utilizadas para criar os logs
$global:DataLog = (Get-Date).tostring("dd-MM-yyyy")
$global:HoraLog = (Get-Date).tostring("HHmmss")
$global:LogFileLocal = ("C:\Users\Public\Documents\Get-HashdeHardware.log")

# Start-Transcript -Path $global:LogFileLocal

function Gravar-Log ([String]$LOG_txt) {

$global:HoraLog = (Get-Date).ToString("HH:mm:ss")

try {
Add-Content -Path $global:LogFileLocal -Value "$global:DataLog - $global:HoraLog : $LOG_txt" -Force -Encoding Unicode
}
catch {
Write-Error "Falha ao gravar no arquivo de log: $_"
return
}
}

Gravar-Log -LOG_txt "================== INICIO =================="
Write-Output ""
Write-Output "Será realizada automaticamente a coleta do hash de hardware."
Start-Sleep -Seconds 3
Write-Output ""
Write-Output "Durante esse processo, as Configurações do sistema serão abertas para realizarmos a exportação dos dados."
Start-Sleep -Seconds 2
Write-Output "Por favor, mantenha-se afastado do teclado e do mouse durante esse processo."
Write-Output "Assim que a coleta for finalizada, você será informado."
Write-Output ""
Start-Sleep -Seconds 5
Write-Output "Realizando a coleta."
Write-Output ""
Start-Sleep -Seconds 2
Write-Output "Aguarde..."
Write-Output ""
Start-Sleep -Seconds 3

Stop-Process -Name SystemSettings -ErrorAction SilentlyContinue
Start-Sleep -Seconds 1
# Abrir a tela de Configurações para Acessar trabalho ou escola
Start-Process ms-settings:workplace

# Aguardar alguns segundos para permitir que a interface de usuário seja carregada
Start-Sleep -Seconds 3
function seWindows {
# Simular o pressionamento da tecla TAB para selecionar o botão Exportar
[System.Windows.Forms.SendKeys]::SendWait("{TAB}")
Start-Sleep -Seconds 1
[System.Windows.Forms.SendKeys]::SendWait("{TAB}")
Start-Sleep -Seconds 1
[System.Windows.Forms.SendKeys]::SendWait("{TAB}")
Start-Sleep -Seconds 1
[System.Windows.Forms.SendKeys]::SendWait("{TAB}")
Start-Sleep -Seconds 2
# Simular o pressionamento da tecla Enter para clicar no botão Exportar
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
}
function seWindowsDomain {
# Simular o pressionamento da tecla TAB para selecionar o botão Exportar
[System.Windows.Forms.SendKeys]::SendWait("{TAB}")
Start-Sleep -Seconds 1
[System.Windows.Forms.SendKeys]::SendWait("{TAB}")
Start-Sleep -Seconds 1
[System.Windows.Forms.SendKeys]::SendWait("{TAB}")
Start-Sleep -Seconds 1
[System.Windows.Forms.SendKeys]::SendWait("{TAB}")
Start-Sleep -Seconds 1
[System.Windows.Forms.SendKeys]::SendWait("{TAB}")
Start-Sleep -Seconds 2
# Simular o pressionamento da tecla Enter para clicar no botão Exportar
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
}

# Verifica se é do AD ou Autopilot e chama a função correta
if ($env:USERDNSDOMAIN) {
seWindowsDomain
} else {
seWindows
}

# Fecha a janela de configurações
Start-Sleep -Seconds 3
Stop-Process -Name SystemSettings

Start-Sleep -Seconds 2
Write-Output "Coletado o hash de hardware..."
Start-Sleep -Seconds 15
Write-Output "Aguarde..."

# Definir o caminho do arquivo .cab e o arquivo CSV desejado
$cabFilePath = "C:\Users\Public\Documents\MDMDiagnostics\MDMDiagReport.cab"
$outputDir = "C:\Users\Public\Documents\ColetaID"
$computerName = $env:COMPUTERNAME
$csvFileName = "DeviceHash_$computerName.csv"

while (-not(Test-Path -Path $cabFilePath)){
Start-Sleep -Seconds 10
Write-Output "Aguarde..."
Gravar-Log -LOG_txt "Aguarde..."
}

# Verificar se não existe a pasta e cria
if (-not(Test-Path -Path $outputDir)) {
mkdir $outputDir
}

# Verificar se o arquivo .cab existe
if (Test-Path -Path $cabFilePath) {

Gravar-Log -LOG_txt "Extraindo CSV..."
Write-Output "Aguarde..."
Start-Sleep -Seconds 2
# Criar uma pasta temporária para extrair o conteúdo do arquivo .cab
$tempDir = New-Item -ItemType Directory -Path "$env:TEMP\MDMDiagReport"

# Usar expand.exe para extrair o arquivo .cab
$logExpadfiles = ""
& expand.exe $cabFilePath -F:* $tempDir.FullName >> $logExpadfiles
Gravar-Log -LOG_txt $logExpadfiles

# Verificar se o arquivo CSV existe no diretório extraído
$extractedCsvPath = Join-Path -Path $tempDir.FullName -ChildPath $csvFileName
if (Test-Path -Path $extractedCsvPath) {

Gravar-Log -LOG_txt "Arquivo CSV encontrado. Copiando para $outputDir..."

# Copiar o arquivo CSV para o diretório de saída
$logCp = ""
Copy-Item -Path $extractedCsvPath -Destination $outputDir >> $logCp
Gravar-Log -LOG_txt $logCp
} else {
Gravar-Log -LOG_txt "Arquivo CSV não encontrado no diretório extraído."
}

# Remover a pasta temporária
Remove-Item -Path $tempDir.FullName -Recurse

# Exibe a pasta e abre o local do CSV
Write-Output "Arquivo Coletado com sucesso."
Gravar-Log -LOG_txt "Arquivo Coletado com sucesso."
Start-Sleep 1
Write-Output "Local: $outputDir"
Start-Sleep 1
Gravar-Log -LOG_txt "Local: $outputDir"
Write-Output "Abrindo a pasta do arquivo..."
Start-Sleep 2
start $outputDir
} else {
Write-Error "Erro para coletar o Hash de Hardware."
Gravar-Log -LOG_txt "Erro para coletar o Hash de Hardware."
}
Gravar-Log -LOG_txt "================== FIM =================="

Ao executar esse script, aguarde até que ele seja executado completamente. Ele abrirá a tela de "Acessar trabalho ou escola" nas configurações do Windows, pressionará os botões necessários para exportar o hash de hardware e salvará o arquivo CSV no diretório especificado.
No final será exibido o diretório especificado para o arquivo CSV gerado. O arquivo terá o formato "DeviceHash_$computerName.csv", onde "$computerName" é o nome do computador.


Observações



  • Não é necessário ter permissões de Administrador para executar esse script, pois ele é executado no contexto de usuário.

To share Download PDF