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 10 ans 1 mois #21506
par Philippe
Réponse de Philippe sur le sujet Re:Récupérer la Description de l'ordinateur
salut galadan
il semble que ce soit lié à ce qu'il y ai ou pas plusieurs utilisateurs qui ce log au PC !
J'ai donc opté pour une autre approche, je prend tout sauf les logins DWM. Voir le script ci dessous
sinon il faudra rajouté la même option dans le import-csv du deuxième script ! ( -Encoding Unicode)
[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}}
}
#$descrip = ($comptes | Group-Object | Sort-object Count -Descending | select count, name)[0].Name
$comptesGroup = $comptes | Group-Object User | Sort-Object Count -Descending
$comptesGroupCount = $comptesGroup | Group-Object Count
if ($comptesGroupCount[0].Count -gt 1) {
$login = $($comptesGroupCount[0].Group | foreach {$_.Group} | Sort-Object TimeLog -Descending)[0].User
}
else {
$login = ($comptesGroup)[0].Name
}
$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]<br><br>Message édité par: 6ratgus, à: 17/02/16 17:17
je suis tombé sur un ordi ou les logon été partiellement comme toi et partiellement comme moi.J'ai pas encore fait de test sur d'autre W10.
il semble que ce soit lié à ce qu'il y ai ou pas plusieurs utilisateurs qui ce log au PC !
J'ai donc opté pour une autre approche, je prend tout sauf les logins DWM. Voir le script ci dessous
j'ai forcé l'encodage Unicode dans export en csv, en espèrent que ça suffise. Voir le script ci dessousLorsque il y a un accent dans la description, cela ajoute à la place un ? dans la description AD.
sinon il faudra rajouté la même option dans le import-csv du deuxième script ! ( -Encoding Unicode)
[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}}
}
#$descrip = ($comptes | Group-Object | Sort-object Count -Descending | select count, name)[0].Name
$comptesGroup = $comptes | Group-Object User | Sort-Object Count -Descending
$comptesGroupCount = $comptesGroup | Group-Object Count
if ($comptesGroupCount[0].Count -gt 1) {
$login = $($comptesGroupCount[0].Group | foreach {$_.Group} | Sort-Object TimeLog -Descending)[0].User
}
else {
$login = ($comptesGroup)[0].Name
}
$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]<br><br>Message édité par: 6ratgus, à: 17/02/16 17:17
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 10 ans 3 semaines #21515
par Galadan
Réponse de Galadan sur le sujet Re:Récupérer la Description de l'ordinateur
Hello,
J'ai ce message d'erreur quand je test sur un W10:
[code:1]Get-WinEvent : Aucun événement correspondant aux critères de sélection spécifiés n'a été trouvé.
Au caractère Ligne:23 : 15
+ $events = Get-WinEvent -FilterXml $filterXML -MaxEvents 20
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:«») [Get-WinEvent], Exception
+ FullyQualifiedErrorId : NoMatchingEventsFound,Microsoft.PowerShell.Commands.GetWinEventCommand
Indexation impossible dans un tableau Null.
Au caractère Ligne:36 : 9
+ if ($comptesGroupCount[0].Count -gt 1) {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:«») [], RuntimeException
+ FullyQualifiedErrorId : NullArray[/code:1]
J'ai ce message d'erreur quand je test sur un W10:
[code:1]Get-WinEvent : Aucun événement correspondant aux critères de sélection spécifiés n'a été trouvé.
Au caractère Ligne:23 : 15
+ $events = Get-WinEvent -FilterXml $filterXML -MaxEvents 20
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:«») [Get-WinEvent], Exception
+ FullyQualifiedErrorId : NoMatchingEventsFound,Microsoft.PowerShell.Commands.GetWinEventCommand
Indexation impossible dans un tableau Null.
Au caractère Ligne:36 : 9
+ if ($comptesGroupCount[0].Count -gt 1) {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:«») [], RuntimeException
+ FullyQualifiedErrorId : NullArray[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 10 ans 3 semaines #21516
par Philippe
Réponse de Philippe sur le sujet Re:Récupérer la Description de l'ordinateur
salut galadan
désolé dans la précipitation je n'est testé la dernière modification du filtre que j'avais faite !
voici la version corrigé
[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}}
}
#$descrip = ($comptes | Group-Object | Sort-object Count -Descending | select count, name)[0].Name
$comptesGroup = $comptes | Group-Object User | Sort-Object Count -Descending
$comptesGroupCount = $comptesGroup | Group-Object Count
if ($comptesGroupCount[0].Count -gt 1) {
$login = $($comptesGroupCount[0].Group | foreach {$_.Group} | Sort-Object TimeLog -Descending)[0].User
}
else {
$login = ($comptesGroup)[0].Name
}
$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]
désolé dans la précipitation je n'est testé la dernière modification du filtre que j'avais faite !
voici la version corrigé
[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}}
}
#$descrip = ($comptes | Group-Object | Sort-object Count -Descending | select count, name)[0].Name
$comptesGroup = $comptes | Group-Object User | Sort-Object Count -Descending
$comptesGroupCount = $comptesGroup | Group-Object Count
if ($comptesGroupCount[0].Count -gt 1) {
$login = $($comptesGroupCount[0].Group | foreach {$_.Group} | Sort-Object TimeLog -Descending)[0].User
}
else {
$login = ($comptesGroup)[0].Name
}
$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 10 ans 3 semaines #21519
par Galadan
Réponse de Galadan sur le sujet Re:Récupérer la Description de l'ordinateur
J'ai ça maintenant:
[code:1]Get-WinEvent : Aucun événement correspondant aux critères de sélection spécifiés n'a été trouvé.
Au caractère Ligne:23 : 15
+ $events = Get-WinEvent -FilterXml $filterXML -MaxEvents 20
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:«») [Get-WinEvent], Exception
+ FullyQualifiedErrorId : NoMatchingEventsFound,Microsoft.PowerShell.Commands.GetWinEventCommand
Indexation impossible dans un tableau Null.
Au caractère Ligne:36 : 9
+ if ($comptesGroupCount[0].Count -gt 1) {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:«») [], RuntimeException
+ FullyQualifiedErrorId : NullArray
[/code:1]
Toujours sur W10.
[code:1]Get-WinEvent : Aucun événement correspondant aux critères de sélection spécifiés n'a été trouvé.
Au caractère Ligne:23 : 15
+ $events = Get-WinEvent -FilterXml $filterXML -MaxEvents 20
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:«») [Get-WinEvent], Exception
+ FullyQualifiedErrorId : NoMatchingEventsFound,Microsoft.PowerShell.Commands.GetWinEventCommand
Indexation impossible dans un tableau Null.
Au caractère Ligne:36 : 9
+ if ($comptesGroupCount[0].Count -gt 1) {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:«») [], RuntimeException
+ FullyQualifiedErrorId : NullArray
[/code:1]
Toujours sur W10.
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 10 ans 3 semaines #21520
par Philippe
Réponse de Philippe sur le sujet Re:Récupérer la Description de l'ordinateur
aie aie aie 
en faite y pas d'erreur de script mais seulement un problème de copier/coller
quand je colle le code, la partie filtre ce coupe au mauvais endroit (dans une chaine de caractères) ce qui n'est pas bon
la fois d'avant aussi c'était la même chose mais je l'avais pas vu de suite, car je corrige automatiquement à la main les retours à la lignes !
je ferait attention à ça la prochaine fois !!
voici avec un filtre aux lignes plus courte :
[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}}
}
#$descrip = ($comptes | Group-Object | Sort-object Count -Descending | select count, name)[0].Name
$comptesGroup = $comptes | Group-Object User | Sort-Object Count -Descending
$comptesGroupCount = $comptesGroup | Group-Object Count
if ($comptesGroupCount[0].Count -gt 1) {
$login = $($comptesGroupCount[0].Group | foreach {$_.Group} | Sort-Object TimeLog -Descending)[0].User
}
else {
$login = ($comptesGroup)[0].Name
}
$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]
en faite y pas d'erreur de script mais seulement un problème de copier/coller
quand je colle le code, la partie filtre ce coupe au mauvais endroit (dans une chaine de caractères) ce qui n'est pas bon
la fois d'avant aussi c'était la même chose mais je l'avais pas vu de suite, car je corrige automatiquement à la main les retours à la lignes !
je ferait attention à ça la prochaine fois !!
voici avec un filtre aux lignes plus courte :
[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}}
}
#$descrip = ($comptes | Group-Object | Sort-object Count -Descending | select count, name)[0].Name
$comptesGroup = $comptes | Group-Object User | Sort-Object Count -Descending
$comptesGroupCount = $comptesGroup | Group-Object Count
if ($comptesGroupCount[0].Count -gt 1) {
$login = $($comptesGroupCount[0].Group | foreach {$_.Group} | Sort-Object TimeLog -Descending)[0].User
}
else {
$login = ($comptesGroup)[0].Name
}
$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 10 ans 2 semaines #21530
par Galadan
Réponse de Galadan sur le sujet Re:Récupérer la Description de l'ordinateur
Hello,
ça marche mieux en effet
Sur certain poste j'ai cette erreur:
[code:1]Impossible d'indexer dans un objet de type Microsoft.PowerShell.Commands.GroupI
nfo.
Au niveau de \\domaine\SysVol\domaine\Policie
s\{697722C2-6CD7-4BDB-9AAF-E4CE1E699C77}\Machine\Scripts\Startup\Recuperation_d
escription.ps1 : 37 Caractère : 28
+ if ($comptesGroupCount[ <<<< 0].Count -gt 1) {
+ CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex
[/code:1]
Je comprends pas l'erreur...
Du coup il récup ou ne génère pas la description.<br><br>Message édité par: Galadan, à: 1/03/16 10:34
ça marche mieux en effet
Sur certain poste j'ai cette erreur:
[code:1]Impossible d'indexer dans un objet de type Microsoft.PowerShell.Commands.GroupI
nfo.
Au niveau de \\domaine\SysVol\domaine\Policie
s\{697722C2-6CD7-4BDB-9AAF-E4CE1E699C77}\Machine\Scripts\Startup\Recuperation_d
escription.ps1 : 37 Caractère : 28
+ if ($comptesGroupCount[ <<<< 0].Count -gt 1) {
+ CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex
[/code:1]
Je comprends pas l'erreur...
Du coup il récup ou ne génère pas la description.<br><br>Message édité par: Galadan, à: 1/03/16 10:34
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.087 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Récupérer la "Description de l'ordinateur"