
¿Alguien sabe cómo obtener la arquitectura del sistema operativo de forma remota desde varios hosts de Windows a través de PowerShell?
Respuesta1
get-wmiobject win32_operatingsystem -computer $_ | select-object OSArchitecture
Canalizará la lista de nombres de computadoras en este comando para que $_ se interprete como cada computadora en su lista.
Editar: después de investigar un poco, parece que esto funcionará tanto en 2003 como en 2008.
get-wmiobject win32_computersystem -computer $_ | select-object systemtype
Respuesta2
Para Windows XP/2003 y versiones posteriores, Win32_Processor tiene una propiedad AddressWidth que será 32 o 64, según corresponda.
Hay 1 instancia de objeto WMI de clase Win32_Processor para cada CPU conocida por el Administrador de dispositivos de Windows, por lo que normalmente he hecho este tipo de cosas en el pasado. Es VBScript, mi PowerShell apesta, pero ya entiendes la idea...
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
actualizar: traducido a PowerShell:
If ($(Get-WmiObject -Query "SELECT * FROM Win32_Processor WHERE AddressWidth='64'")) {
Write-Host "I'm x64"
} Else {
Write-Host "I'm x86"
}
Respuesta3
Quizás un poco menos sofisticado, pero para aquellos que no tienen habilitado WMI remoto, una forma un poco antigua sería:
$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..."}
}
}
O algo así. El quid de la cuestión es la ruta de prueba a los archivos de programa (x86), que solo está presente en máquinas de 64 bits.