Las tareas de WMI para la administración de escritorio pueden ejercer el control y obtener datos de un escritorio remoto o de un equipo local. Por ejemplo, puede determinar si el protector de pantalla de un equipo local requiere una contraseña. WMI también le ofrece la capacidad de apagar un equipo remoto. Para obtener otros ejemplos, consulte TechNet ScriptCenter en https://www.microsoft.com/technet.
Los ejemplos de script que se muestran en este tema solo obtienen datos del equipo local. Para obtener más información sobre cómo usar el script para obtener datos de equipos remotos, consulte Conexión a WMI en un equipo remoto.
En el procedimiento siguiente se describe cómo ejecutar un script.
Para ejecutar un script
- Copie el código y guárdelo en un archivo con una extensión .vbs, como filename.vbs. Asegúrese de que el editor de texto no agrega una extensión .txt al archivo.
- Abra una ventana del símbolo del sistema y vaya al directorio donde guardó el archivo.
- Escriba nombredearchivo.vbs de cscript en el símbolo del sistema.
- Si no puede acceder a un registro de eventos, compruebe si se ejecuta desde un símbolo del sistema con privilegios elevados. Algunos registros de eventos, como el registro de eventos de seguridad, pueden estar protegidos por controles de acceso de usuario (UAC).
Nota
De forma predeterminada, cscript muestra la salida de un script en la ventana del símbolo del sistema. Dado que los scripts WMI pueden generar grandes cantidades de salida, es posible que desee redirigir la salida a un archivo. Escriba cscript filename.vbs > outfile.txt en el símbolo del sistema para redirigir la salida del script de filename.vbs a outfile.txt.
En la tabla siguiente se enumeran ejemplos de script que se pueden usar para obtener varios tipos de datos del equipo local.
| ... determinar si un equipo remoto se ha arrancado en modo seguro con estado de red? |
Use la clase Win32_ComputerSystem y compruebe el valor de la propiedad primaryOwnerName de.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings
Wscript.Echo "System Name: " & objComputer.Name
Wscript.Echo "Registered owner: " & objComputer.PrimaryOwnerName
Next
|
$colSettings = Get-WmiObject -Class Win32_ComputerSystem
foreach ($objComputer in $colSettings)
{
"System Name: " + $objComputer.Name
"Registered owner: " + $objComputer.PrimaryOwnerName
}
|
|
| ... determinar si un protector de pantalla del equipo requiere una contraseña? |
Utilice la clase Win32_Desktop y compruebe el valor de la propiedad ScreenSaverSecure.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Desktop")
For Each objItem in colItems
Wscript.Echo "Screen Saver Secure: " & objItem.ScreenSaverSecure
Next
|
$Computer = "."
$Desktops = Get-WMIObject -class Win32_Desktop -ComputerName $computer
"{0} desktops found as follows" -f $desktops.count
foreach ($desktop in $desktops) {
"Desktop : {0}" -f $Desktop.Name
"Screen Saver : {0}" -f $desktop.ScreensaverExecutable
"Secure : {0} " -f $desktop.ScreenSaverSecure
""
}
|
|
| ... compruebe que se ha establecido una pantalla de equipo para 800 píxeles en 600 píxeles? |
Use la clase Win32_DesktopMonitor y compruebe los valores de las propiedades ScreenHeight y ScreenWidth.
strComputer = "."
Set objWMIService = GetObject(_
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_DesktopMonitor")
For Each objItem in colItems
Wscript.Echo "Screen Height: " & objItem.ScreenHeight
Wscript.Echo "Screen Width: " & objItem.ScreenWidth
Next
|
<# Get desktop information #>
$computer = "." $desktops = Get-WmiObject -Class Win32_DesktopMonitor $hostname = nombre de host
<# Mostrar detalles del escritorio #> "Hay {0} Escritorios en {1} de la siguiente manera: " -f $desktops. Count, $hostname "" $i=1 # recuento de escritorios en este sistema
foreach ($desktop in $desktops) {
"Desktop {0}: {1}" -f $i++, $Desktop.Caption
"Screen Height : {0}" -f $desktop.ScreenHeight
"Screen Width : {0}" -f $desktop.ScreenWidth
""
}
|
|
| ... determinar cuánto tiempo se ha estado ejecutando un equipo? |
Use la clase Win32_OperatingSystem y la propiedad LastBootUpTime. Resta ese valor de la hora actual para obtener el tiempo de actividad del sistema.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
For Each objOS in colOperatingSystems
dtmBootup = objOS.LastBootUpTime
dtmLastBootUpTime = WMIDateStringToDate(dtmBootup)
dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now)
Wscript.Echo dtmSystemUptime
Next
Function WMIDateStringToDate(dtmBootup)
WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" & _
Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) & " " & Mid (dtmBootup, 9, 2) & ":" & _
Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup, 13, 2))
End Function
|
función WMIDateStringToDate($Bootup) { [System.Management.ManagementDateTimeconverter]::ToDateTime($Bootup) }
<# Script principal #> $Computer = "." # ajuste según sea necesario $computers = Get-WMIObject -class Win32_OperatingSystem -computer $computer
foreach ($system in $computers) {
$Bootup = $system.LastBootUpTime
$LastBootUpTime = WMIDateStringToDate($Bootup)
$now = Get-Date
$Uptime = $now-$lastBootUpTime
"System Up for: {0}" -f $UpTime
}
|
|
| ... reiniciar o apagar un equipo remoto? |
Usa la clase Win32_OperatingSystem y el métodoWin32Shutdown. Debe incluir el privilegio remoteShutdown al conectarse a WMI. Para obtener más información, vea Ejecución de operaciones con privilegios mediante VBScript. A diferencia del métodoShutdownen Win32_OperatingSystem, el método win32Shutdown permite establecer marcas para controlar el comportamiento de apagado.
strComputer = "atl-dc-01"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Shutdown)}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
ObjOperatingSystem.Shutdown(1)
Next
|
strComputer = "atl-dc-01"
$colOperatingSystem = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $strComputer -Namespace "wmi\cimv2"
foreach ($objOperatingSystem in $colOperatingSystem)
{
[void]$objOperatingSystem.Shutdown()
}
|
|
| ... determinar qué aplicaciones se ejecutan automáticamente cada vez que inicio Windows? |
Use la clase Win32_StartupCommand.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colStartupCommands = objWMIService.ExecQuery _
("Select * from Win32_StartupCommand")
For Each objStartupCommand in colStartupCommands
Wscript.Echo "Command: " & objStartupCommand.Command & VBNewLine _
& "Description: " & objStartupCommand.Description & VBNewLine _
& "Location: " & objStartupCommand.Location & VBNewLine _
& "Name: " & objStartupCommand.Name & VBNewLine _
& "SettingID: " & objStartupCommand.SettingID & VBNewLine _
& "User: " & objStartupCommand.User
Next
|
$strComputer = "."
$colItems = Get-WmiObject -Class Win32_StartupCommand -ComputerName $strComputer
foreach ($objStartupCommand in $colItems)
{
"Command: " + $objStartupCommand.Command
"Description: " + $objStartupCommand.Description
"Location: " + $objStartupCommand.Location
"Name: " + $objStartupCommand.Name
"SettingID: " + $objStartupCommand.SettingID
"User: " + $objStartupCommand.User
}
|
|
-
tareas de WMI para scripts y aplicaciones
-
ejemplos de aplicaciones de C++ de WMI
-
techNet ScriptCenter