As tarefas WMI para gerenciamento de área de trabalho podem exercer controle e obter dados de uma área de trabalho remota ou de um computador local. Por exemplo, você pode determinar se o protetor de tela em um computador local requer uma senha. O WMI também oferece a capacidade de desligar um computador remoto. Para obter outros exemplos, consulte o TechNet ScriptCenter em https://www.microsoft.com/technet.
Os exemplos de script mostrados neste tópico obtêm dados somente do computador local. Para obter mais informações sobre como usar o script para obter dados de computadores remotos, consulte Conectando-se ao WMI em um computador remoto.
O procedimento a seguir descreve como executar um script.
Executar um script
- Copie o código e salve-o em um arquivo com uma extensão .vbs, como filename.vbs. Verifique se o editor de texto não adiciona uma extensão .txt ao arquivo.
- Abra uma janela do prompt de comando e navegue até o diretório onde você salvou o arquivo.
- Digite cscript filename.vbs no prompt de comando.
- Se você não puder acessar um log de eventos, verifique se está em execução em um prompt de comando com privilégios elevados. Alguns Logs de Eventos, como o Log de Eventos de Segurança, podem ser protegidos pelos Controles de Acesso do Usuário (UAC).
Nota
Por padrão, o cscript exibe a saída de um script na janela do prompt de comando. Como os scripts WMI podem produzir grandes quantidades de saída, convém redirecionar a saída para um arquivo. Digite cscript filename.vbs > outfile.txt no prompt de comando para redirecionar a saída do script filename.vbs para outfile.txt.
A tabela a seguir lista exemplos de script que podem ser usados para obter vários tipos de dados do computador local.
... determinar se um computador remoto foi inicializado no modo de segurança com o estado de rede? |
Use a classe Win32_ComputerSystem e verifique o valor da propriedade PrimaryOwnerName.
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 se um protetor de tela de computador requer uma senha? |
Use a classe Win32_Desktop e verifique o valor da propriedade 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
""
}
|
|
... verificar se uma tela do computador foi definida para 800 pixels por 600 pixels? |
Use a classe Win32_DesktopMonitor e verifique os valores das propriedades ScreenHeight e 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 = nome do host
<# Exibir detalhes da área de trabalho #> "Há áreas de trabalho {0} em {1} da seguinte maneira:" -f $desktops. Contagem, $hostname contagem "" $i=1 # de áreas de trabalho neste 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 por quanto tempo um computador está em execução? |
Use a classe Win32_OperatingSystem e a propriedade LastBootUpTime. Subtraia esse valor da hora atual para obter o tempo de atividade do 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
|
função WMIDateStringToDate($Bootup) { [System.Management.ManagementDateTimeconverter]::ToDateTime($Bootup) }
<# Script principal #> $Computer = "." # ajustar conforme necessário $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
}
|
|
... reinicializar ou desligar um computador remoto? |
Use a classe Win32_OperatingSystem e o métodoWin32Shutdown. Você deve incluir o privilégio RemoteShutdown ao se conectar ao WMI. Para obter mais informações, consulte executando operações com privilégios usando o VBScript. Ao contrário do método Shutdown em Win32_OperatingSystem, o método Win32Shutdown permite que você defina sinalizadores para controlar o comportamento de desligamento.
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 quais aplicativos são executados automaticamente sempre que inicio o Windows? |
Use a classe 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
}
|
|
-
tarefas WMI para scripts e aplicativos
-
exemplos de aplicativo WMI C++
-
do TechNet ScriptCenter