Partager via


Tâches WMI : Comptes et domaines

Les tâches d’administration de compte et de domaine obtiennent des informations telles que le domaine de l’ordinateur ou l’utilisateur actuellement connecté. La plupart de ces tâches sont mieux effectuées avec scripts ADSI. Pour plus d’informations et d’autres exemples, consultez le référentiel TechNet ScriptCenter Script.

Les exemples de script présentés dans cette rubrique obtiennent des données uniquement à partir de l’ordinateur local. Pour plus d’informations sur l’utilisation du script pour obtenir des données à partir d’ordinateurs distants, consultez Connexion à WMI sur un ordinateur distant.

La procédure suivante décrit comment exécuter un script.

Pour exécuter un script

  1. Copiez le code et enregistrez-le dans un fichier avec une extension .vbs, telle que filename.vbs. Vérifiez que votre éditeur de texte n’ajoute pas d’extension .txt au fichier.
  2. Ouvrez une fenêtre d’invite de commandes et accédez au répertoire où vous avez enregistré le fichier.
  3. Tapez cscript filename.vbs à l’invite de commandes.
  4. Si vous ne pouvez pas accéder à un journal des événements, vérifiez si vous exécutez à partir d’une invite de commandes Avec élévation de privilèges. Certains journaux d’événements, tels que le journal des événements de sécurité, peuvent être protégés par les contrôles d’accès utilisateur (UAC).

Note

Par défaut, cscript affiche la sortie d’un script dans la fenêtre d’invite de commandes. Étant donné que les scripts WMI peuvent produire de grandes quantités de sortie, vous pouvez rediriger la sortie vers un fichier. Tapez cscript filename.vbs > outfile.txt à l’invite de commandes pour rediriger la sortie du script filename.vbs vers outfile.txt.

Le tableau suivant répertorie les exemples de script qui peuvent être utilisés pour obtenir différents types de données à partir de l’ordinateur local.

Comment faire... Classes ou méthodes WMI
... déterminer le domaine dans lequel un ordinateur appartient ? Utilisez la classe Win32_ComputerSystem et vérifiez la valeur de la propriété Domain. Vous pouvez également utiliser la propriété DNSDomain dans Win32_NetworkAdapterConfiguration.

VB
              
              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 "Domain: " & objComputer.Domain Next

PowerShell
$computer = Get-WmiObject -Class Win32_ComputerSystem
"System Name: {0}" -f $computer.name
"Domain : {0}" -f $computer.domain

C#
              
              à l’aide de Microsoft.Management.Infrastructure ; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session. QueryInstances(@"root\cimv2 », « WQL », « SELECT * FROM Win32_ComputerSystem ») ; 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString()); Console.WriteLine(cimObj.CimInstanceProperties["Domain"].ToString()); }

... déterminer si un ordinateur est un serveur ou une station de travail ?

Utilisez la classe Win32_ComputerSystem et la propriété DomainRole.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colComputers = objWMIService.ExecQuery("Select DomainRole from Win32_ComputerSystem")
For Each objComputer in colComputers
    Select Case objComputer.DomainRole 
        Case 0 
            strComputerRole = "Standalone Workstation"
        Case 1        
            strComputerRole = "Member Workstation"
        Case 2
            strComputerRole = "Standalone Server"
        Case 3
            strComputerRole = "Member Server"
        Case 4
            strComputerRole = "Backup Domain Controller"
        Case 5
            strComputerRole = "Primary Domain Controller"
    End Select
    Wscript.Echo strComputerRole
Next

PowerShell
              
              $Computer = Get-WmiObject -Class Win32_ComputerSystem 

« Computer &quot;{0}.{1}» est un : « -f $Computer.Name,$computer.domain

switch ($computer.DomainRole) { 0 {"Standalone Workstation"} 1 {"Member Workstation"} 2 {"Standalone Server"} 3 {"Member Server"} 4 {"Backup Domain Controller"} 5 {"Primary Domain Controller"} }

... déterminer le nom de l’ordinateur ?

Utilisez la classe Win32_ComputerSystem et la propriété Name. Vous pouvez également utiliser la propriété DNSHostName dans Win32_NetworkAdapterConfiguration.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objItem in colItems
    Wscript.Echo "Computer Name: " & objItem.Name
Next
PowerShell
$Computer = Get-WmiObject -Class Win32_ComputerSystem
"Computer Name is: {0}" -f $Computer.Name

C#
              
              à l’aide de Microsoft.Management.Infrastructure ; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session. QueryInstances(@"root\cimv2 », « WQL », « SELECT * FROM Win32_ComputerSystem ») ; 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString()); }

... recherchez le nom de la personne actuellement connectée à un ordinateur ?

Utilisez la classe Win32_ComputerSystem et la propriété UserName.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colComputer = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
 
For Each objComputer in colComputer
    Wscript.Echo "User Name = " & objComputer.UserName & VBNewLine & "Computer Name = " & objComputer.Name
WScript.Echo objComputer.UserName
Next
PowerShell
$computers = Get-WmiObject -Class Win32_ComputerSystem 
"Logged on user(s):"
foreach($computer in $computers) {
   "User: {0}" -f $computer.UserName
}

C#
              
              à l’aide de Microsoft.Management.Infrastructure ; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session. QueryInstances(@"root\cimv2 », « WQL », « SELECT * FROM Win32_ComputerSystem ») ; 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine("User Name: " + cimObj.CimInstanceProperties["UserName"].ToString()); }

... renommez un ordinateur ?

Utilisez la classe Win32_ComputerSystem et la méthode Renommer.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colComputers
    errReturn = ObjComputer.Rename("NewName")
    WScript.Echo "Computer name is now " & objComputer.Name
Next

PowerShell
              
              param ( [$String] $NewName = 'NewName', [$string] $Comp = « . » } 

<# Obtenir l’objet ordinateur #> $Computer = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp

<# Renommer l’ordinateur #> $Return = $Computer.Rename($NewName)

if ($return.ReturnValue -eq 0) { "Computer name is now: $NewName" " but you need to reboot first" } else { " RenameFailed, return code: {0}" -f $return.ReturnValue }

... récupérer uniquement des groupes locaux à l’aide de WMI ?

Utilisez la classe Win32_Group et incluez la clause WHERE suivante dans votre requête WQL.

Where LocalAccount = True

VB
strComputer = "."
Set objWMIService = GetObject( _
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_Group  Where LocalAccount = True")
For Each objItem in colItems
    Wscript.Echo "Local Account: " & objItem.LocalAccount & VBNewLine _
        & "Name: " & objItem.Name & VBNewLine _
        & "SID: " & objItem.SID & VBNewLine _
        & "SID Type: " & objItem.SIDType & VBNewLine _
        & "Status: " & objItem.Status & VBNewLine
Next
PowerShell
$Accts=Get-WMIObjectWin32_Group|where {$_.LocalAccount}
$accts |ftName, Sid, SidType, Status-autosize

tâches WMI pour les scripts et les applications

exemples d’applications WMI C++

TechNet ScriptCenter