Обнаружение версии ОС не Windows 10 1809 через сетевую команду Powershell - PullRequest
2 голосов
/ 31 октября 2019

Мне нужно проверить, какие устройства в нашей сети, у которых нет версии ОС 1809 Windows 10, и мне нужно выполнить сканирование, чтобы определить, какие устройства извлекают данные из AD.

  Try{$Domain = $(get-addomain).dnsroot}
  Catch{$Domain = ""}

  $Log = "C:\Temp\Audit\$Domain OS Compliance $(get-date -f yyyy-MM-dd).csv"

  $Computers = Get-ADComputer -Filter {Enabled -eq $True} -Property * | 
  Select Enabled,Name,OperatingSystem,OperatingSystemVersion

  foreach ($Computer in $Computers)
  {
   #properties
   $Version = $Computer.OperatingSystemVersion
   $Enabled = $Computer.Enabled
   $Name = $Computer.Name
   $OS = $Computer.OperatingSystem
  }

  #Windows10 Build 1908 check
  If($OS -like "Windows 10*")
  {
      $Type = "Computer"
      $CountComputers++
      $Build = "1908"


   $obj = New-Object PSobject
   $obj | Add-Member NoteProperty -Name "Enabled" -Value $Enabled
   $obj | Add-Member NoteProperty -Name "Name" -Value $Computer.Name
   $obj | Add-Member NoteProperty -Name "Operating System" -Value 
       $Computer.OperatingSystem
   $obj | Add-Member NoteProperty -Name "Version" -Value $Version
   $obj | Add-Member NoteProperty -Name "Build" -Value $Build
  }

  $OutData = $OutData | sort -Property "Type","Name"
  $OutData | Export-CSV $Log -notype -Encoding UTF8
  write-host "Log Export Complete to $Log" -foregroundcolor yellow

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

1 Ответ

1 голос
/ 31 октября 2019

С компьютера с установленными инструментами RSAT (или с контроллера домена) вы можете запустить следующую учетную запись, которая может получить доступ ко всем ПК / серверам в домене:

$computers = ( Get-ADComputer -Filter * -Properties DNSHostName ).DNSHostName
$results = Invoke-Command -ComputerName $computers {
  switch ( [System.Environment]::OsVersion.Version.Major ) {
    10 {
      [PSCustomObject]@{ AtLeast1809 = [System.Environment]::OsVersion.Version.Build -ge 18362 }
      break
    }
    default {
      [PSCustomObject]@{ AtLeast1809 = $False }
    }
  }
}

$results | Where-Object { -Not $_.AtLeast1809 } | Select-Object PSComputerName, AtLeast1809

Этот код просматривает текущийосновная версия, если это не 10, мы автоматически возвращаем $false. Если это Windows 10, мы проверяем версию сборки. После запуска Invoke-Command на всех компьютерах в домене мы выводим из коллекции $results все компьютеры, версия которых не ниже Windows 10 1809, затем выбираем свойство PSComputerName (автоматическое свойство, добавляемое при использовании Invoke-Command, чтобы отметить, с какого компьютера был получен результат) и свойство AtLeast1809, которое мы вернули с удаленного компьютера.

Обратите внимание, что вы можете не запускать это для каждого компьютера / сервера в вашем домене по адресуодин раз. Вы можете настроить параметр фильтра , чтобы выбрать только те компьютеры, которые вам нужны в пакетном режиме.

Вот таблица соответствия для версий Windows 10 . 1809 год постройки 18362.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...