Question
Récupérer la "Description de l'ordinateur"
- NicolasBdn
-
- Hors Ligne
- Membre senior
-
[code:1]#Récupération de la version de l'OS
$OSVersion = (Get-WmiObject -Class Win32_operatingsystem).Version
#Déclaration du logontype en fonction de la version
Switch -Wildcard ($OSVersion){
\"6.1.*\" {$logontype=2}
\"10.0.*\" {$logontype=11}
default {$logontype=2}
}
$filterXML = @\"
<QueryList>
<Query Id=\"0\" Path=\"Security\">
<Select Path=\"Security\">
(*[System[(EventID = 4624 )]] and *[EventData[Data[@Name='LogonType']='$logontype']])
</Select>
</Query>
</QueryList>
\"@
#Récupération du nom du PC
$computer = (Get-WmiObject -Class win32_computersystem).name
#Récupération de la description de l'ordinateur
$description = (Get-WmiObject -class win32_operatingsystem |select Description).description
if ($description -ne \"\"«») {
# on prend la description du pc
$descrip = $description
}
else {
# 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 -lt 1){
$descrip = $($comptesGroupCount[0].Group.Group | Sort-Object TimeLog -Descending)[0].User
}else{
$descrip = ($comptesGroup)[0].Name
}
}
$FullName = (Get-WmiObject Win32_UserAccount | Where-Object {$_.Name -like $descrip}).FullName
# Ecriture de la description dans un fichier au nom de l'ordinateur
\" \" | select @{n=\"computer\";e={$computer}}, @{n=\"description\";e={$FullName}} | export-Csv $home\$computer.csv
[/code:1]
J'ai simplement modifié la fin du script pour qu'il lance une recherche sur la base WMI avec le logon contenu dans la variable $descrip.
J'ai ensuite remplacé la variable $descrip par $FullName.
Peux-tu tester? Je n'ai pas encore mis d'AD en place pour les tests.
Il semblerait que cela ne fonctionne pas avec mon W10 car mon compte est un compte Microsoft. Le name des events Log est une adresse mail, non référencé dans la table Win32_UserAccount.
Connexion ou Créer un compte pour participer à la conversation.
- Galadan
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 75
- Remerciements reçus 0
Je test en GPO computer demain matin.
J'ai ajouté le log d'erreur.
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
j'ai commencé ce message ce matin et je le finis juste maintenant avec quelques adaptation en fonction de vos messages de la journée !!!
@nicolas
joliePour toi 6ratgus :
ici j'aurais pas osé !
[code:1]$comptesGroupCount[0].Group.Group[/code:1]en powershel v2 c'était pas possible et j'ai encore les vieux reflex !
ce qui me fais dire que ça pose un probleme si on l'utilise sur des postes en V2 !!!
oui Win32_UserAccount renvoie tous les utilisateurs du domaine sans filtre-Ou sinon, continuons dans notre interrogation de la base WMI non? ^^, Win32_UserAccount devrait p-e contenir ce dont nous avons besoin. Sinon j'ai Win32_UserInDomain. mais j'ai pas de domain AD pour voir ce que ça contient
avec filtre :[code:1]Get-WmiObject -Class Win32_UserAccount -Filter \"name = '$login'\"[/code:1]ça donne l'info que l'on a besoin dans fullname
et c'est plus rapide que le where que tu a fais !!
@galadan
exactD'aprés ton script on met la variable qui contient le login a la place des XXX, c'est ça?
c'est un peu le sujet du jour :Si la description est égale au login pas besoin de remonter d'info en plus non?
- si le script dans la GPO récupère la description ou le displayname selon la situation, pas besoin de changé le contenue du fichier CSV
- mais si pour des raison de vitesse par exemple, c'est pas possible de récupéré le displayname dans le script de la GPO, il faudra envoyé dans le fichier CSV la description ou le login mais avec un moyen de savoir que c'est un login, pour que le deuxième script le convertisse en displayname.
il faut vérifier si la technique adsi et/ou wmi Win32_UserAccount fonctionne dans la GPO
et voir si ça ralentie le boot
il faut donc que tu test le dernier script de Nicolas dans la GPO sur un PC SANS Description et vérifié dans le fichier CSV si tu a bien le displayname de l'utilisateur du domaine
alors à demain !Je test en GPO computer demain matin.
si j'ai pas était clair faut le dire
Connexion ou Créer un compte pour participer à la conversation.
- NicolasBdn
-
- Hors Ligne
- Membre senior
-
je casse un peu le rythme des messages mais j'ai malheureusement un boulot
Te plains pas, moi j'en cherche !!! ^^
en powershel v2 c'était pas possible et j'ai encore les vieux reflex !
ce qui me fais dire que ça pose un probleme si on l'utilise sur des postes en V2 !!! le cas de presque tous le Windows 7
Désolé, j'avais mis de côté cet énorme détails... ^^
Je suis plutôt du genre à mettre la dernière version en place!
ça donne l'info que l'on a besoin dans fullname
et c'est plus rapide que le where que tu a fais !!
Oui, réflex du gas qui cherche des infos rapidement et qui abuse du where...
il faut donc que tu test le dernier script de Nicolas dans la GPO
Hum par manque d'attention dans mon dernier script j'ai inclus la partie qui ne fonctionne pas sous V2.
Je pense donc que demain sera un échec sur les W7...
Voici le code qui est censé fonctionner:
[code:1]#Récupération de la version de l'OS
$OSVersion = (Get-WmiObject -Class Win32_operatingsystem).Version
#Déclaration du logontype en fonction de la version
Switch -Wildcard ($OSVersion){
\"6.1.*\" {$logontype=2}
\"10.0.*\" {$logontype=11}
default {$logontype=2}
}
$filterXML = @\"
<QueryList>
<Query Id=\"0\" Path=\"Security\">
<Select Path=\"Security\">
(*[System[(EventID = 4624 )]] and *[EventData[Data[@Name='LogonType']='$logontype']])
</Select>
</Query>
</QueryList>
\"@
#Récupération du nom du PC
$computer = (Get-WmiObject -Class win32_computersystem).name
#Récupération de la description de l'ordinateur
$description = (Get-WmiObject -class win32_operatingsystem |select Description).description
if ($description -ne \"\"«») {
# on prend la description du pc
$descrip = $description
}
else {
# 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'} {$comptes += $_.\"#text\" }
}
}
$descrip = ($comptes | Group-Object | Sort-object Count -Descending)[0].Name
}
$FullName = (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={$FullName}} | export-Csv :\partage_description\$computer.csv[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Galadan
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 75
- Remerciements reçus 0
Je met le nouveau code.
Question pour le log d'erreur, je voudrais le mettre sur le même partage que le CSV, je suis pas sur de la syntaxe:
[code:1]$Error > \\partage_Description\ErrorDexcription.log[/code:1] ?
Connexion ou Créer un compte pour participer à la conversation.
- NicolasBdn
-
- Hors Ligne
- Membre senior
-
Question pour le log d'erreur, je voudrais le mettre sur le même partage que le CSV
Mauvaise idée, si c'est un problème d'accès au partage, ton script n'y aura pas accès et le log ne sera pas généré. Mieux vaut le mettre en local du poste et le récupérer manuellement.<br><br>Message édité par: NicolasB, à: 28/01/16 09:14
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Récupérer la "Description de l'ordinateur"