Question win32_keyboard \"layout\"

Plus d'informations
il y a 17 ans 1 mois #4014 par Olivier
Bonjour !

J'ai un problème avec la commande suivante :

[code:1](get-wmiobject win32_keyboard).layout[/code:1]

Pourquoi cette commande me retourne pas le code \"layout\" ? qui devrait correspondre dans mon cas à \"0000100C\" ou plutôt à \"0000040C\" pour ceux de l'exagone ;-)

Merci d'avance pour vos lumières

Olivier

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

Plus d'informations
il y a 17 ans 1 mois #4017 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:win32_keyboard "layout"
Ah! Erreur commune, qui illustre pile poil mon propos de l'autre jour sur la difficulté de savoir à l'avance si une commande retourne une valeur scalaire ou une énumération.

Ici, tu essaies d'accéder directement à la propriété layout de l'objet retourné par la commande \"gwmi win32_keyboard\". Ca ne marchera que si cette commande retourne un objet qui a une telle propriété... Jusque là on est d'accord. :)

En fait, les instances de win32_keyboard ont bien une propriété layout. Alors que se passe-t-il? Hé bien, de toute évidence la requête retourne plusieurs instances de win32_keyboard. Donc, l'objet retourné est une énumération, et cette énumération en tant que telle n'a aucune propriété répondant au doux nom de \"layout\".

Si tu regardes dans ton gestionnaire de matériel tu devrais en effet voir plusieurs claviers enregistrés - ça parait bizarre, mais ça marche comme ça. :)

Pour le vérifier dans PowerShell, si tu tapes simplement la commande suivante, tu verras que tu as bien au moins deux instances de win32_keyboard :

[code:1]
gwmi win32_keyboard | ft description, layout
[/code:1]
A priori, les différentes configurations devraient toutes avoir le même layout. Pour récupérer cette valeur tu pourras donc simplement faire ceci :

[code:1]
# récupérer le \"layout\" de la 1ere instance de win32_keyboard :
(gwmi win32_keyboard)[0].layout
[/code:1]
Mais en fait, le code clavier récupéré est un réglage propre à l'utilisateur en cours. Une technique possible consisterait à interroger la base de registre, et plus particulièrment la ruche HKCU (HKEY_CURRENT_USER) :

[code:1]
(get-itemproperty \"hkcu:\Keyboard layout\preload\"«»).\"1\"
[/code:1]
Janel<br><br>Message édité par: janel, à: 11/02/09 08:43

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

Plus d'informations
il y a 17 ans 1 mois #4022 par Olivier
Réponse de Olivier sur le sujet Re:win32_keyboard "layout"
Bonjour à tous !
J'ai bien intégré les conseils de Mr. Janel dans mon script et en local, tout va bien ! (ou presque :blink: ) quand j'utilise la commande suivante :
[code:1][Convert]::ToInt32((Get-WmiObject win32_keyboard)[0].layout,16)[/code:1]

Sur mon Vista en local ça fonctionne mais si j'exécute cette commande sur un XP SP2 ou 3 ou un serveur 2008, j'ai l'erreur suivante :

Unable to index into an object of type System.Management.ManagementObject.
At line:1 char:51
+ [Convert]::ToInt32((Get-WmiObject win32_keyboard)[ &lt;&lt;&lt;&lt; 0].layout,16)
+ CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex


Est-ce que vous auriez une piste ?

En fait, la commande suivante ne passe même pas : (Sauf sur mon Vista)
[code:1](Get-WmiObject win32_keyboard)[0].layout[/code:1]

Elle me génère la même erreur sur mes autres postes ... Sur mon Vista, elle me retourne bien \&quot;0000100C\&quot;

Merci d'avance pour les lumières apportées à mon \&quot;bug\&quot; ;-) et pour tous les conseils et solutions déjà apportées ! www.powershell-scripting.com c'est du béton :) !!

Olivier

PS :
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 ?<br><br>Message édité par: Olivier, à: 12/02/09 00:43

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

Plus d'informations
il y a 17 ans 1 mois #4023 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:win32_keyboard
Salut,
vérifie que tu reçois bien + éléments
[code:1]
$Tab=Get-WmiObject win32_keyboard
if ($Tab -is [array])
{[Convert]::ToInt32($Tab[0].layout,16) }[/code:1]
On ne peut indexer que dans un tableau et pas un scalaire. Sur mon poste cet appel me renvoi une seule valeur

Tutoriels PowerShell

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

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

Ben sur mon Vista, ça me renvoie bien la valeur \&quot;4108\&quot;

Vista:
[code:1]PS C:\Users\Olivier Demont&gt; $Tab=Get-WmiObject win32_keyboard
if ($Tab -is [array])
{[Convert]::ToInt32($Tab[0].layout,16) }
4108[/code:1]

Mais sur XP SP3, ça renvoie rien ...

XP SP3:
[code:1]PS C:\Users\Olivier Demont&gt; $Tab=Get-WmiObject win32_keyboard
if ($Tab -is [array])
{[Convert]::ToInt32($Tab[0].layout,16) }[/code:1]

Comment se fait-ce ?

Pour contourner le problème, j'ai mis le code suivant dans mon script :
[code:1]$ObjKeyboards = [Convert]::ToInt32((get-itemproperty \&quot;hkcu:\Keyboard layout\preload\&quot;«»).\&quot;1\&quot;,16)
$OSLanguage = (Get-WmiObject win32_operatingsystem).OSlanguage
$map = @{
\&quot;1\&quot;=\&quot;Arabic\&quot;
\&quot;4\&quot;=\&quot;Chinese (Simplified)– China\&quot;
\&quot;9\&quot;=\&quot;English\&quot;
\&quot;1025\&quot;=\&quot;Arabic – Saudi Arabia\&quot;
\&quot;1026\&quot;=\&quot;Bulgarian\&quot;
\&quot;1027\&quot;=\&quot;Catalan\&quot;
\&quot;1028\&quot;=\&quot;Chinese (Traditional) – Taiwan\&quot;
\&quot;1029\&quot;=\&quot;Czech\&quot;
\&quot;1030\&quot;=\&quot;Danish\&quot;
\&quot;1031\&quot;=\&quot;German – Germany\&quot;
\&quot;1032\&quot;=\&quot;Greek\&quot;
\&quot;1033\&quot;=\&quot;English – United States\&quot;
\&quot;1034\&quot;=\&quot;Spanish – Traditional Sort\&quot;
\&quot;1035\&quot;=\&quot;Finnish\&quot;
\&quot;1036\&quot;=\&quot;French – France\&quot;
\&quot;1037\&quot;=\&quot;Hebrew\&quot;
\&quot;1038\&quot;=\&quot;Hungarian\&quot;
\&quot;1039\&quot;=\&quot;Icelandic\&quot;
\&quot;1040\&quot;=\&quot;Italian – Italy\&quot;
\&quot;1041\&quot;=\&quot;Japanese\&quot;
\&quot;1042\&quot;=\&quot;Korean\&quot;
\&quot;1043\&quot;=\&quot;Dutch – Netherlands\&quot;
\&quot;1044\&quot;=\&quot;Norwegian – Bokmal\&quot;
\&quot;1045\&quot;=\&quot;Polish\&quot;
\&quot;1046\&quot;=\&quot;Portuguese – Brazil\&quot;
\&quot;1047\&quot;=\&quot;Rhaeto-Romanic\&quot;
\&quot;1048\&quot;=\&quot;Romanian\&quot;
\&quot;1049\&quot;=\&quot;Russian\&quot;
\&quot;1050\&quot;=\&quot;Croatian\&quot;
\&quot;1051\&quot;=\&quot;Slovak\&quot;
\&quot;1052\&quot;=\&quot;Albanian\&quot;
\&quot;1053\&quot;=\&quot;Swedish\&quot;
\&quot;1054\&quot;=\&quot;Thai\&quot;
\&quot;1055\&quot;=\&quot;Turkish\&quot;
\&quot;1056\&quot;=\&quot;Urdu\&quot;
\&quot;1057\&quot;=\&quot;Indonesian\&quot;
\&quot;1058\&quot;=\&quot;Ukrainian\&quot;
\&quot;1059\&quot;=\&quot;Belarusian\&quot;
\&quot;1060\&quot;=\&quot;Slovenian\&quot;
\&quot;1061\&quot;=\&quot;Estonian\&quot;
\&quot;1062\&quot;=\&quot;Latvian\&quot;
\&quot;1063\&quot;=\&quot;Lithuanian\&quot;
\&quot;1065\&quot;=\&quot;Persian\&quot;
\&quot;1066\&quot;=\&quot;Vietnamese\&quot;
\&quot;1069\&quot;=\&quot;Basque\&quot;
\&quot;1070\&quot;=\&quot;Serbian\&quot;
\&quot;1071\&quot;=\&quot;Macedonian (F.Y.R.O. Macedonia)\&quot;
\&quot;1072\&quot;=\&quot;Sutu\&quot;
\&quot;1073\&quot;=\&quot;Tsonga\&quot;
\&quot;1074\&quot;=\&quot;Tswana\&quot;
\&quot;1076\&quot;=\&quot;Xhosa\&quot;
\&quot;1077\&quot;=\&quot;Zulu\&quot;
\&quot;1078\&quot;=\&quot;Afrikaans\&quot;
\&quot;1080\&quot;=\&quot;Faeroese\&quot;
\&quot;1081\&quot;=\&quot;Hindi\&quot;
\&quot;1082\&quot;=\&quot;Maltese\&quot;
\&quot;1084\&quot;=\&quot;Gaelic\&quot;
\&quot;1085\&quot;=\&quot;Yiddish\&quot;
\&quot;1086\&quot;=\&quot;Malay – Malaysia\&quot;
\&quot;2049\&quot;=\&quot;Arabic – Iraq\&quot;
\&quot;2052\&quot;=\&quot;Chinese (Simplified) – PRC\&quot;
\&quot;2055\&quot;=\&quot;German – Switzerland\&quot;
\&quot;2057\&quot;=\&quot;English – United Kingdom\&quot;
\&quot;2058\&quot;=\&quot;Spanish – Mexico\&quot;
\&quot;2060\&quot;=\&quot;French – Belgium\&quot;
\&quot;2064\&quot;=\&quot;Italian – Switzerland\&quot;
\&quot;2067\&quot;=\&quot;Dutch – Belgium\&quot;
\&quot;2068\&quot;=\&quot;Norwegian – Nynorsk\&quot;
\&quot;2070\&quot;=\&quot;Portuguese – Portugal\&quot;
\&quot;2072\&quot;=\&quot;Romanian – Moldova\&quot;
\&quot;2073\&quot;=\&quot;Russian – Moldova\&quot;
\&quot;2074\&quot;=\&quot;Serbian – Latin\&quot;
\&quot;2077\&quot;=\&quot;Swedish – Finland\&quot;
\&quot;3073\&quot;=\&quot;Arabic – Egypt\&quot;
\&quot;3076\&quot;=\&quot;Chinese (Traditional) – Hong Kong SAR\&quot;
\&quot;3079\&quot;=\&quot;German – Austria\&quot;
\&quot;3081\&quot;=\&quot;English – Australia\&quot;
\&quot;3082\&quot;=\&quot;Spanish – International Sort\&quot;
\&quot;3084\&quot;=\&quot;French – Canada\&quot;
\&quot;3098\&quot;=\&quot;Serbian – Cyrillic\&quot;
\&quot;4097\&quot;=\&quot;Arabic – Libya\&quot;
\&quot;4100\&quot;=\&quot;Chinese (Simplified) – Singapore\&quot;
\&quot;4103\&quot;=\&quot;German – Luxembourg\&quot;
\&quot;4105\&quot;=\&quot;English – Canada\&quot;
\&quot;4106\&quot;=\&quot;Spanish – Guatemala\&quot;
\&quot;4108\&quot;=\&quot;French – Switzerland\&quot;
\&quot;5121\&quot;=\&quot;Arabic – Algeria\&quot;
\&quot;5127\&quot;=\&quot;German – Liechtenstein\&quot;
\&quot;5129\&quot;=\&quot;English – New Zealand\&quot;
\&quot;5130\&quot;=\&quot;Spanish – Costa Rica\&quot;
\&quot;5132\&quot;=\&quot;French – Luxembourg\&quot;
\&quot;6145\&quot;=\&quot;Arabic – Morocco\&quot;
\&quot;6153\&quot;=\&quot;English – Ireland\&quot;
\&quot;6154\&quot;=\&quot;Spanish – Panama\&quot;
\&quot;7169\&quot;=\&quot;Arabic – Tunisia\&quot;
\&quot;7177\&quot;=\&quot;English – South Africa\&quot;
\&quot;7178\&quot;=\&quot;Spanish – Dominican Republic\&quot;
\&quot;8193\&quot;=\&quot;Arabic – Oman\&quot;
\&quot;8201\&quot;=\&quot;English – Jamaica\&quot;
\&quot;8202\&quot;=\&quot;Spanish – Venezuela\&quot;
\&quot;9217\&quot;=\&quot;Arabic – Yemen\&quot;
\&quot;9226\&quot;=\&quot;Spanish – Colombia\&quot;
\&quot;10241\&quot;=\&quot;Arabic – Syria\&quot;
\&quot;10249\&quot;=\&quot;English – Belize\&quot;
\&quot;10250\&quot;=\&quot;Spanish – Peru\&quot;
\&quot;11265\&quot;=\&quot;Arabic – Jordan\&quot;
\&quot;11273\&quot;=\&quot;English – Trinidad\&quot;
\&quot;11274\&quot;=\&quot;Spanish – Argentina\&quot;
\&quot;12289\&quot;=\&quot;Arabic – Lebanon\&quot;
\&quot;12298\&quot;=\&quot;Spanish – Ecuador\&quot;
\&quot;13313\&quot;=\&quot;Arabic – Kuwait\&quot;
\&quot;13322\&quot;=\&quot;Spanish – Chile\&quot;
\&quot;14337\&quot;=\&quot;Arabic – U.A.E.\&quot;
\&quot;14346\&quot;=\&quot;Spanish – Uruguay\&quot;
\&quot;15361\&quot;=\&quot;Arabic – Bahrain\&quot;
\&quot;15370\&quot;=\&quot;Spanish – Paraguay\&quot;
\&quot;16385\&quot;=\&quot;Arabic – Qatar\&quot;
\&quot;16394\&quot;=\&quot;Spanish – Bolivia\&quot;
\&quot;17418\&quot;=\&quot;Spanish – El Salvador\&quot;
\&quot;18442\&quot;=\&quot;Spanish – Honduras\&quot;
\&quot;19466\&quot;=\&quot;Spanish – Nicaragua\&quot;
\&quot;20490\&quot;=\&quot;Spanish – Puerto Rico\&quot;
}
$keyb = $map.$(\&quot;$ObjKeyboards\&quot;«»)
if (!$keyb)
{ $keyb = \&quot;Unknown\&quot;
}
$OSLang = $map.$(\&quot;$OSLanguage\&quot;«»)
if (!$OSLang)
{ $OSLang = \&quot;Unknown\&quot;
}
cls
\&quot;Configuration du clavier = $keyb\&quot;
\&quot;Langue du système d'exploitation = $OSLang\&quot;[/code:1]

Dans ce cas, la Hashtable est similaire pour les config clavier et pour les code de Pays et autres ... (enfin pas vérifier mais pour l'instant il me retourne bien de bonne valeurs ...)

Les sources de correspondance des codes viennent de MSDN : Win32_OperatingSystem Class

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

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

Mais sur XP SP3, ça renvoie rien ...

Le code associé au test ou à l'appel WMI ?
Le \&quot;else\&quot; du test est implicite, c'est à dire si ce n'est pas un tableau c'est un scalaire, CQFD.

Tutoriels PowerShell

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

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