Question
win32_keyboard \"layout\"
- Olivier
- Auteur du sujet
- Hors Ligne
- Membre elite
-
- Messages : 182
- Remerciements reçus 0
désolé pour le retard ... plein de choses à faire
Pour mon script, j'ai modifié plein de choses en local et maintenant ça marche plus trop en réseau ... faut d'abord que je corrige toutes mes fautes et après, si besoin est, je reviendrai demander de l'aide ...
Entre temps, sitot que j'ai une version qui fonctionne chez moi de mon script, je le metterai à dispo ici pour qu'on puisse encore l'améliorer
Tout de bon et à +
Olivier<br><br>Message édité par: Olivier, à: 14/02/09 16:25
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
[code:1][System.Globalization.CultureInfo]::GetCultures([ System.Globalization.CultureTypes]::AllCultures)[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
- Messages : 576
- Remerciements reçus 0
La commande [code:1](get-itemproperty \"hkcu:\Keyboard layout\preload\").\"1\"[/code:1]
fonctionne mais n'est-il pas préférable de soutirer les infos par les composants WMI ?
Non, pas forcément. La base de registre est tout aussi documentée que les classes WMI, en tout cas en ce qui concerne l'entrée utilisée ci-dessus.
De plus, tu peux voir que l'accès aux infos clavier par WMI est assez délicat à traiter puisque selon les OS tu as un ou plusieurs claviers de déclarés. Ton script devient donc inutilement complexe, alors qu'à la base l'info que tu cherches est stockée à coup sûr dans l'entrée de la base de registre indiquée ci-dessus.
Par contre, l'accès à la base de registre tel qu'indiqué ci-dessus est purement local, alors que la requête WMI peut être faire sur une machine distante. Il faut donc peser le pour et le contre de chaque méthode selon les objectifs visés.
Pour ce qui est de l'info que tu essayes de récupérer sur la culture du poste, en local tu as la commandelette get-culture :
[code:1]
PS> get-culture
LCID Name DisplayName
---- ----
1036 fr-FR French (France)
[/code:1]
Sinon, en passant par le code clavier et la classe .NET indiquée par Laurent, ça donne ceci :
[code:1]
$lcid = [convert]::ToInt32((get-itemproperty \"hkcu:\Keyboard layout\preload\"«»).\"1\",16)
$culture = [System.Globalization.CultureInfo]$lcid
[/code:1]
Janel<br><br>Message édité par: janel, à: 15/02/09 19:41
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
On peut accéder à la base de registre en remote, voir ce post .Par contre, l'accès à la base de registre tel qu'indiqué ci-dessus est purement local, alors que la requête WMI peut être faire sur une machine distante. Il faut donc peser le pour et le contre de chaque méthode selon les objectifs visés.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Olivier
- Auteur du sujet
- Hors Ligne
- Membre elite
-
- Messages : 182
- Remerciements reçus 0
En fait, après quelques tests, si on passe par WMI pour trouver la propriété \"OSArchitecture\" de la classe \"Win32_operatingsystem\", ben sur XP, cette propriété n'existe pas donc, ça nous retourne une valeur \"Null\" (ou une erreur suivant le script ...)
mais sur vista, quand on fait :
[code:1](Get-WmiObject win32_operatingsystem).osarchitecture[/code:1]
ben là on retrouve le type d'architecture de note stations/serveur ...
Un peu différent, la classe \"Win32_Keyboard\" et sa propriété \"Layout\"
Sur Vista, elle est bien existante et bien renseignée donc si on fait :
[code:1](Get-WmiObject win32_keyboard)[0].layout[/code:1]
ça nous retourne bien la valeur de la propriété \"Layout\", dans mon cas \"0000100C\"
Par contre, sur XP, il faut lui demander de la façon suivante pour qu'il nous retourne la même valeur :
[code:1](Get-WmiObject win32_keyboard).layout[/code:1]
Donc dans ce cas, en passant par la base de registre, quelque soit le système, on nous retourne toujours la bonne valeur soit :
(Exemple sur PC distant)
[code:1]$PCDistant = \"Stat1\"
$ObjKeyboards = [Convert]::ToInt32([microsoft.win32.registrykey]::openremotebasekey(\"CurrentUser\",$PCDistant).opensubkey(\"Keyboard layout\preload\").getvalue(\"1\"),16)
$langkeyboard = [System.Globalization.CultureInfo]::GetCultureInfo($ObjKeyboards).displayname
\"Config clavier = $langkeyboard \"[/code:1]
Merci à tout ceux qui m'ont permis de faire ces bouts de code ... mon script avance doucement mais surement
Moralité, l'utilisation des classes WMI devrait être une priorité mais cette méthode n'est pas infaillible ... donc, dans ce cas, la base de registre serait une issue de secour.
Tout de bon et à +
Olivier<br><br>Message édité par: Olivier, à: 16/02/09 02:03
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
- Messages : 576
- Remerciements reçus 0
On peut accéder à la base de registre en remote, voir ce post .
Merci pour la précision Laurent. Je voulais simplement dire que la technique que j'indiquais dans mon message (via le Provider standard de PowerShell) n'autorise que l'accès à la base de registre locale.
J'aurais dû préciser qu'on peut quand même accéder à une base de registre distante mais en s'y prenant autrement, merci pour la rectification.
Janel
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- win32_keyboard "layout"