Question win32_keyboard \"layout\"

Plus d'informations
il y a 17 ans 1 mois #4051 par Olivier
Réponse de Olivier sur le sujet Re:win32_keyboard
re ...
désolé pour le retard ... plein de choses à faire :ohmy:

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.

Plus d'informations
il y a 17 ans 1 mois #4052 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:win32_keyboard
Pour info, il n'est pas nécessaire de dupliquer la table des langues/culture :
[code:1][System.Globalization.CultureInfo]::GetCultures([ System.Globalization.CultureTypes]::AllCultures)[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #4058 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:win32_keyboard
Olivier écrit:

La commande [code:1](get-itemproperty \&quot;hkcu:\Keyboard layout\preload\&quot;).\&quot;1\&quot;[/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&gt; 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 \&quot;hkcu:\Keyboard layout\preload\&quot;«»).\&quot;1\&quot;,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.

Plus d'informations
il y a 17 ans 1 mois #4060 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:win32_keyboard
janel écrit:

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.

On peut accéder à la base de registre en remote, voir ce post .

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #4061 par Olivier
Réponse de Olivier sur le sujet Re:win32_keyboard
Bonjour !

En fait, après quelques tests, si on passe par WMI pour trouver la propriété \&quot;OSArchitecture\&quot; de la classe \&quot;Win32_operatingsystem\&quot;, ben sur XP, cette propriété n'existe pas donc, ça nous retourne une valeur \&quot;Null\&quot; (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 \&quot;Win32_Keyboard\&quot; et sa propriété \&quot;Layout\&quot;

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é \&quot;Layout\&quot;, dans mon cas \&quot;0000100C\&quot;

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 = \&quot;Stat1\&quot;
$ObjKeyboards = [Convert]::ToInt32([microsoft.win32.registrykey]::openremotebasekey(\&quot;CurrentUser\&quot;,$PCDistant).opensubkey(\&quot;Keyboard layout\preload\&quot;).getvalue(\&quot;1\&quot;),16)
$langkeyboard = [System.Globalization.CultureInfo]::GetCultureInfo($ObjKeyboards).displayname
\&quot;Config clavier = $langkeyboard \&quot;[/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.

Plus d'informations
il y a 17 ans 1 mois #4062 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:win32_keyboard
Laurent Dardenne écrit:

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.

Temps de génération de la page : 0.076 secondes
Propulsé par Kunena