Я пытаюсь сканировать компьютеры в определенном подразделении в своем AD, чтобы получить статус активации Windows.
я продолжаю получать
Test-Connection : Testing connection to computer 'CN=PCNAME,OU=MY-OU' failed: No such host is known
хотя, когда я пытаюсь проверить команду на одном удаленном ПК, она отлично работает, получая вывод
Я пытаюсь получить все хосты, используя
$Hosts = Get-ADComputer -Filter \* -SearchBase "OU=MY-OU"
а затем запустил цикл for для проверки соединения каждого хоста и использования
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
В настоящее время ваше значение $PC выглядит следующим образом $PC = "CN=server1,OU=OU1,OU=OU2,OU=OU3,DC=домен,DC=org" чтобы получить имя компьютера, разделите строку, как показано ниже, и используйте это значение для тестового соединения. $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
Отредактировано: в $Hosts есть несколько свойств, поэтому вместо разделения различающегося имени используйте Select-object для получения имени хоста DNS. У меня нет среды для тестирования этого кода... поэтому попробуйте сами.
$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
Также, когда я пытаюсь немного изменить код, я получаю сообщение об ошибке Method invocation failed because [Microsoft.ActiveDirectory.Management.ADComputer] does not contain a method named 'Split'.
Использование Select-object для получения имени хоста! Спасибо!
я добавил
$PC = $Hosts.Split(',')[0].Split('=')[1]
после получения -Adcomputer, но я все еще получаю ту же ошибку