
Weiß jemand, wie man per PowerShell remote auf die Betriebssystemarchitektur von mehreren Windows-Hosts zugreift?
Antwort1
get-wmiobject win32_operatingsystem -computer $_ | select-object OSArchitecture
Sie leiten die Liste der Computernamen in diesen Befehl weiter, sodass $_ als jeder Computer in Ihrer Liste interpretiert wird.
Bearbeiten: Nach einigem Herumstöbern scheint es, dass dies sowohl unter 2003 als auch unter 2008 funktioniert.
get-wmiobject win32_computersystem -computer $_ | select-object systemtype
Antwort2
Unter Windows XP/2003 und höher verfügt Win32_Processor über eine AddressWidth-Eigenschaft, die je nach Bedarf 32 oder 64 beträgt.
Es gibt eine WMI-Objektinstanz der Klasse Win32_Processor für jede CPU, die dem Geräte-Manager von Windows bekannt ist. Daher habe ich in der Vergangenheit normalerweise so etwas gemacht. Es ist VBScript, meine PowerShell ist Mist, aber Sie verstehen, was ich meine …
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
aktualisieren: in PowerShell übersetzt:
If ($(Get-WmiObject -Query "SELECT * FROM Win32_Processor WHERE AddressWidth='64'")) {
Write-Host "I'm x64"
} Else {
Write-Host "I'm x86"
}
Antwort3
Vielleicht ein bisschen weniger ausgefallen, aber für diejenigen, die Remote-WMI nicht aktiviert haben, wäre eine etwas altmodische Methode:
$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..."}
}
}
Oder so ähnlich. Der springende Punkt ist der Testpfad zu den Programmen (x86), der nur auf 64-Bit-Rechnern vorhanden ist.