powershell - 通过网络Powershell命令发现OS版本而不是Windows 10 1809

标签 powershell

我需要检查网络中的哪些设备,
其中没有OS版本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不太了解,任何人都可以分享我或给我任何输入,以便我可以制定自己的代码来帮助我

最佳答案

在安装了RSAT工具的计算机上(或从DC),您可以使用可以访问域中所有PC /服务器的帐户运行以下命令:

$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属性。

请注意,您可能不想一次对域中的每台计算机/服务器运行此命令。您可能需要adjust the filter parameter来批量选择您想要的计算机。

Here is the lookup table for Windows 10 versions。 1809年建立18362。

关于powershell - 通过网络Powershell命令发现OS版本而不是Windows 10 1809,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58636215/

相关文章:

powershell - 如何使预构建脚本出错,仅包含错误详细信息的错误消息

c++ - 与 powershell get-physicaldisk 命令等效的 Windows API

powershell - 使用ConvertTo-Json时,powershell将date属性转换为字符串

powershell - 尝试在带有 IE 11 的 Powershell 中使用 getElementById,来自 HRESULT : 0x800A01B6 的错误异常

arrays - Powershell字节数组到十六进制

powershell - 查询 Azure Active Directory 的 UPN 和主 SMTP 地址,然后导出到 CSV

powershell - 即使 $VerbosePreference 为 'Continue',Copy-Item 也不显示详细消息

powershell - 如何将变量从PowerShell传递到批处理变量

powershell - 如何使用 PowerShell checkout TFS 中的文件?

powershell - Powershell-显示清理(get-filehash结果为.txt文件)