
Кто-нибудь знает, как удаленно получить архитектуру ОС с нескольких хостов Windows через PowerShell?
решение1
get-wmiobject win32_operatingsystem -computer $_ | select-object OSArchitecture
Вы передадите список имен компьютеров в эту команду, чтобы $_ интерпретировался как каждый компьютер в вашем списке.
Редактировать: После некоторых раскопок выяснилось, что это будет работать как в 2003, так и в 2008 годах.
get-wmiobject win32_computersystem -computer $_ | select-object systemtype
решение2
Для Windows XP/2003 и более поздних версий Win32_Processor имеет свойство AddressWidth, которое будет равно 32 или 64, в зависимости от ситуации.
Для каждого ЦП, известного диспетчеру устройств Windows, существует 1 экземпляр объекта WMI класса Win32_Processor, поэтому я обычно делал что-то подобное в прошлом. Это VBScript, мой PowerShell отстой, но вы поняли...
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor WHERE AddressWidth='64'")
If colItems.Count = 0 Then
strArch = "x86"
Else
strArch = "x64"
End If
обновлять: переведено на PowerShell:
If ($(Get-WmiObject -Query "SELECT * FROM Win32_Processor WHERE AddressWidth='64'")) {
Write-Host "I'm x64"
} Else {
Write-Host "I'm x86"
}
решение3
Возможно, это немного менее затейливо, но для тех, у кого не включен удаленный WMI, вот немного старомодный способ:
$compList = #<whatever you use to source your list of machines>
ForEach($comp in $compList){
$testPath64 = '\\' + $comp + '\c$\Program Files (x86)'
$testPath = '\\' + $comp + '\c$\Program Files'
$arch = Test-Path $testPath64
If($arch){Write-Host "$comp is x64"}
Else{
$arch = Test-Path $testPath
If($arch){Write-Host "$comp is x86"}
Else{Write-Host "No idea..."}
}
}
Или что-то в этом роде. Суть в том, что test-path к Program Files (x86) присутствует только на 64-битных машинах.