Question
Récupérer la "Description de l'ordinateur"
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 7 ans 6 mois #21531
par Philippe
Réponse de Philippe sur le sujet Re:Récupérer la Description de l'ordinateur
salut galadan
l'erreur indique que l'on essai d'accédé à un tableau alors que l'objet n'a qu'un seul élément (donc pas un tableau)
maintenant ce cas est pris en compte !
il restera le cas ou aucun utilisateur ne c'est connecté au pc ou depuis trop longtemps pour qu'il soit dans le journal d'évènement mais c'est un cas très rare qui ne devrais pas posé de problème
voici la dernière correction ! dernière car pour la prochaine erreur tu aura de l'aide, des indications mais pas de correctif
la période de garantie est terminé !!
mais ne t'inquiète pas on te laissera pas dans la mer..
[code:1]
$filterXML = @\"
<QueryList>
<Query Id=\"0\" Path=\"Security\">
<Select Path=\"Security\">
(*[System[(EventID = 4624 )]] and ((
*[EventData[Data[@Name='LogonType']='2']] or
*[EventData[Data[@Name='LogonType']='7']]) and
*[EventData[Data[@Name='TargetUserName']!='DWM-1']] and
*[EventData[Data[@Name='TargetUserName']!='DWM-2']] and
*[EventData[Data[@Name='TargetUserName']!='DWM-3']] ))
</Select>
</Query>
</QueryList>
\"@
#Récupération du nom du PC
$computer = $env:COMPUTERNAME
#Récupération de la description de l'ordinateur
$description = (Get-WmiObject -class win32_operatingsystem |select Description).description
# si la description est vide
if ($description.Trim() -eq \"\"«») {
# on prend l'utilisateur le plus fréquemment connecté
$events = Get-WinEvent -FilterXml $filterXML -MaxEvents 20
$comptes = @()
$events | foreach {
$eventXML = [xml]$_.ToXml()
switch ($eventXML.Event.EventData.Data) {
{$_.Name -eq 'TargetUserName'} {$comptesName = $_.\"#text\"}
}
$comptes += $eventXML.Event.System.TimeCreated | Select-Object @{n='User';e={$comptesName}},@{n='TimeLog';e={$_.SystemTime}}
}
$comptesGroup = $comptes | Group-Object User | Sort-Object Count -Descending
$comptesGroupCount = $comptesGroup | Group-Object Count
if (($comptesGroupCount | Measure-Object).count -eq 1 -and $comptesGroupCount.Count -eq 1) {
$login = ($comptesGroup).Name
}
else {
$comptesGroupCount = $comptesGroupCount | Group-Object Count
if ($comptesGroupCount.Count -gt 1) {
$login = ($comptesGroup[0]).Name
}
else {
$login = $($comptesGroup | foreach {$_.Group} | Sort-Object TimeLog -Descending)[0].User
}
}
}
$description = (Get-WmiObject Win32_UserAccount -Filter \"name = '$login'\"«»).FullName
}
# Ecriture de la description dans un fichier au nom de l'ordinateur
\" \" | select @{n=\"computer\";e={$computer}}, @{n=\"description\";e={$description}} | export-Csv c:\$computer.csv -Encoding Unicode
[/code:1]
l'erreur indique que l'on essai d'accédé à un tableau alors que l'objet n'a qu'un seul élément (donc pas un tableau)
maintenant ce cas est pris en compte !
il restera le cas ou aucun utilisateur ne c'est connecté au pc ou depuis trop longtemps pour qu'il soit dans le journal d'évènement mais c'est un cas très rare qui ne devrais pas posé de problème
voici la dernière correction ! dernière car pour la prochaine erreur tu aura de l'aide, des indications mais pas de correctif

la période de garantie est terminé !!

mais ne t'inquiète pas on te laissera pas dans la mer..
[code:1]
$filterXML = @\"
<QueryList>
<Query Id=\"0\" Path=\"Security\">
<Select Path=\"Security\">
(*[System[(EventID = 4624 )]] and ((
*[EventData[Data[@Name='LogonType']='2']] or
*[EventData[Data[@Name='LogonType']='7']]) and
*[EventData[Data[@Name='TargetUserName']!='DWM-1']] and
*[EventData[Data[@Name='TargetUserName']!='DWM-2']] and
*[EventData[Data[@Name='TargetUserName']!='DWM-3']] ))
</Select>
</Query>
</QueryList>
\"@
#Récupération du nom du PC
$computer = $env:COMPUTERNAME
#Récupération de la description de l'ordinateur
$description = (Get-WmiObject -class win32_operatingsystem |select Description).description
# si la description est vide
if ($description.Trim() -eq \"\"«») {
# on prend l'utilisateur le plus fréquemment connecté
$events = Get-WinEvent -FilterXml $filterXML -MaxEvents 20
$comptes = @()
$events | foreach {
$eventXML = [xml]$_.ToXml()
switch ($eventXML.Event.EventData.Data) {
{$_.Name -eq 'TargetUserName'} {$comptesName = $_.\"#text\"}
}
$comptes += $eventXML.Event.System.TimeCreated | Select-Object @{n='User';e={$comptesName}},@{n='TimeLog';e={$_.SystemTime}}
}
$comptesGroup = $comptes | Group-Object User | Sort-Object Count -Descending
$comptesGroupCount = $comptesGroup | Group-Object Count
if (($comptesGroupCount | Measure-Object).count -eq 1 -and $comptesGroupCount.Count -eq 1) {
$login = ($comptesGroup).Name
}
else {
$comptesGroupCount = $comptesGroupCount | Group-Object Count
if ($comptesGroupCount.Count -gt 1) {
$login = ($comptesGroup[0]).Name
}
else {
$login = $($comptesGroup | foreach {$_.Group} | Sort-Object TimeLog -Descending)[0].User
}
}
}
$description = (Get-WmiObject Win32_UserAccount -Filter \"name = '$login'\"«»).FullName
}
# Ecriture de la description dans un fichier au nom de l'ordinateur
\" \" | select @{n=\"computer\";e={$computer}}, @{n=\"description\";e={$description}} | export-Csv c:\$computer.csv -Encoding Unicode
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Galadan
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 75
- Remerciements reçus 0
il y a 7 ans 6 mois #21533
par Galadan
Réponse de Galadan sur le sujet Re:Récupérer la Description de l'ordinateur
Merci 
ça marche!!
Pas de soucis ça me feras que du bien d'avoir seulement quelques indications!!

ça marche!!

Pas de soucis ça me feras que du bien d'avoir seulement quelques indications!!

Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.056 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Récupérer la "Description de l'ordinateur"