Как мне получить список машин на определенной версии Windows - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь получить список компьютеров, имя которых равно LN-M *, а затем из результатов отфильтровывать те, которые имеют ReleaseID (версия Windows) 1703

Powershell -

это список переменных, которые я буду использовать

$ReleaseID = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseID).ReleaseID
$ComputerName = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" -Name ComputerName).ComputerName

Это для фильтрации машин по имени

$Threshold = (Get-Date).AddDays(-400)

$DesktopPC = Get-ADComputer -Filter * -Properties Name | 
    where (         
            $_.name -Like "LN-M*" 
        )

$results = $DesktopPC | select name

Это результаты, которые я надеюсьполучить

ForEach-Object {$results -eq 
$_.ReleaseID -eq 1703 

 $ComputerName.Name

 }

1 Ответ

1 голос
/ 28 мая 2019

Базовый пример кода, приведенный ниже, сделает то, что вы просите для машин, которые находятся в сети и доступны.Вам нужно будет добавить логику проверки и проверки ошибок.

$targetMachines = New-Object System.Collections.ArrayList

#Filter by name right in your AD query instead of getting all computer objects
$allMachines = Get-ADComputer -Filter 'Name -like "LN-M*"'

$allMachines | foreach {
    $dnsHostname = $_.DNSHostName

    # The remote registry service will need to be running on the the target machine
    $registry = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$dnsHostname)
    $key = $registry.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion")
    $releaseID = $key.GetValue("ReleaseID")

    if ($releaseID -eq 1703)
    {
        $targetMachines.Add($dnsHostname) | Out-Null
    }
}

# These are the machines you are looking for (with Jedi hand wave)
$targetMachines
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...