Home > Software engineering >  How to get Windows Activation status on all PCs in a specific OU in Active Directory using PowerShel
How to get Windows Activation status on all PCs in a specific OU in Active Directory using PowerShel

Time:11-11

I am trying to scan computers in a specific OU in my AD to get the activation status of Windows.

I keep getting Test-Connection : Testing connection to computer 'CN=PCNAME,OU=MY-OU' failed: No such host is known

although when i try to test the command against a single remote PC, it works fine getting the output

I tries getting all hosts using

$Hosts = Get-ADComputer -Filter \* -SearchBase "OU=MY-OU"

and then ran a for loop to test the connection of each host and using

foreach ($PC in $Hosts) {
    if (Test-Connection $PC -Count 1) {
    $License = Get-CimInstance SoftwareLicensingProduct -Filter "Name like 'Windows%'" -ComputerName $PC |where { $_.PartialProductKey } | select Description, LicenseStatus

    $csv =          [PSCustomObject]@{
                    License      = $License 
                    Computername = $PC
                }
            

        }
    }
Write-Output $csv

CodePudding user response:

Currently your $PC value is like this $PC = "CN=server1,OU=OU1,OU=OU2,OU=OU3,DC=domain,DC=org" in order to get computer name, split the string like below and use that value for test-connection $CN = $PC.Split(',')[0].Split('=')[1]

$domainName = "CN=server1,OU=OU1,OU=OU2,OU=OU3,DC=domain,DC=org"
$CN = $domainName.Split(',')[0].Split('=')[1]
$CN

Edited: There are multiple properties in $Hosts, so instead of splitting distinguished name, use Select-object to get dns hostname. I do not have an environment to test this code.. so please try yourself.

$Hosts = Get-ADComputer -Filter \* -SearchBase "OU=MY-OU" | Select-Object dnsHostName
$csv = foreach ($dnsHostName in $Hosts) {
    Write-Output $dnsHostName
    if (Test-Connection $dnsHostName -Count 1) {
        $License = Get-CimInstance SoftwareLicensingProduct -Filter "Name like 'Windows%'" -ComputerName $dnsHostName | where { $_.PartialProductKey } | select Description, LicenseStatus

        [PSCustomObject]@{
            License      = $License 
            Computername = $dnsHostName
        }
    }
}
$csv | Export-csv -Path C:\temp\output.csv -NoTypeInformation
  • Related