Question Modif clef sur +sieur serveur et pour +sieur user

Plus d'informations
il y a 17 ans 5 mois #2935 par exca
[code:1]Foreach( $serveur IN (get-content $ini | where { ! $_ -match [String]::Empty }) ) [/code:1]

Ca marche :)

par contre :s
[code:1]Incomplete $(subexpression) sequence in string.
+ Write-Host \"$chaine -> $( $regKey1.GetValue(\"$ <<<< chaine\"«») )\"
Exception calling \"Substring\" with \"2\" argument(s): \"Index and length must refer to a location within the string.
Parameter name: length\"
+ if ( ($subkey.length -ge 8) -and ( $subkey.substring( <<<< ($subkey.length - 8), $subkey.length) -ine \"_Classes\" ) )
[/code:1]

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

Plus d'informations
il y a 17 ans 5 mois #2936 par Laurent Dardenne
Le pb est dans l'ouverture de la clé, tu y inséres un guillemet, et pour le substring autant prendre l'opérateur -notmatch :
[code:1]
# on vire les clef \"*_Classes\"
if ($subkey -notmatch \"_Classes\"«»)
...
$regKey1 = $regKey1.OpenSubKey(\"$subkey$key_end\"«»)
#ou $regKey1 = $regKey1.OpenSubKey(\"$subkey\"+\"$key_end\"«»)
[/code:1]

[Edit]
Tu ne contrôles aucun cas d'exception dans ton script...<br><br>Message édité par: Laurent Dardenne, à: 10/10/08 16:13

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 5 mois #2938 par exca
[code:1]$computername = (get-wmiobject win32_computersystem).name

if ( \&quot;$computername\&quot; -ieq \&quot;machineVlan1\&quot; ) { $ini = \&quot;D:\front_include_CA.ini\&quot;}
if ( \&quot;$computername\&quot; -ieq \&quot;machineVlan2\&quot; ) { $ini = \&quot;D:\middle_back_include_CA.ini\&quot;}

$root = \&quot;Users\&quot;
#$root = \&quot;LocalMachine\&quot;
$type = [Microsoft.Win32.RegistryHive]::$root
#$key = \&quot;SOFTWARE\Microsoft\Windows\CurrentVersion\&quot;
$key = \&quot;\&quot;
$key_end = \&quot;\Control Panel\Desktop\&quot;
$chaine = \&quot;ScreenSaveTimeOut\&quot;
$value = 200

# pour chaque machine du fichier a partles lignes vides
Foreach( $serveur IN (get-content $ini | where { ! $_ -match [String]::Empty }) )
{
$regKey = [microsoft.win32.registrykey]::openremotebasekey($type, $serveur)
$regKey = $regKey.OpenSubKey($key)
Write-Host \&quot;$serveur\&quot;
Write-Host \&quot;
\&quot;
Foreach( $subkey in $regKey.GetSubKeyNames())
{
# on vire les clef \&quot;*_Classes\&quot;
if ( $subkey -notmatch \&quot;_Classes\&quot; )
{ #comme on a les user on va changer la valeur ici
Write-host -NoNewLine \&quot;$subkey \&quot;
$regKey1 = [microsoft.win32.registrykey]::openremotebasekey($type, $serveur)
$regKey1 = $regKey1.OpenSubKey(\&quot;$subkey$key_end\&quot;«»)
Write-Host \&quot;$chaine = \&quot; $regKey1.GetValue(\&quot;$chaine\&quot;«»)
}

}
#pause
Write-Host \&quot;...\&quot;
$null = $Host.UI.RawUI.ReadKey(\&quot;NoEcho,IncludeKeyDown\&quot;«»)
}
[/code:1]

ca marche :']
Merci

Qu'elles genre d'exceptions faut il gérer ? D'ailleurs quand on appelle une commande il y a moyen de savoir quelle Exception il y a trap ?

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

Plus d'informations
il y a 17 ans 5 mois #2939 par Laurent Dardenne
exca écrit:

D'ailleurs quand on appelle une commande il y a moyen de savoir quelle Exception il y a trap ?

Non il faut regarder la doc si c'est précisé ( sinon le code avec Reflector pour les + avancés)
exca écrit:

Qu'elles genre d'exceptions faut il gérer ?

Dans ce cas on consulte MSDN, et on recherche le nom de la classe dans la version 2.0 du framework, ensuite on consulte la doc du membre (méthode ou propriété), le paragraphe Exception et parfois Remarks
msdn.microsoft.com/en-us/library/microso...ebasekey(VS.80).aspx
Pour OpenRemoteBaseKEy tu as celles-ci
ArgumentException : hKey is invalid.

IOException : machineName is not found.

ArgumentNullException : machineName is a null reference (Nothing in Visual Basic).

SecurityException : The user does not have the proper permissions to perform this operation.

UnauthorizedAccessException : The user does not have the necessary registry rights.

Le plus souvent on n'en tient pas compte mais en cas de pb on se retrouve dans le brouillard. Et comme en prod c'est souvent le mode urgence mieux vaut bétonner le script. Ainsi tu t'assures que le pb ne provient pas du script mais d'une condition extérieur et tu sais laquelle ou au moins dans quelle direction rechercher.

Par exemple pour IOException un nom de machine peut être mal orthographié bien que ce cas peut être déjà traité en amont par un test à l'aide de ping par exemple, etc

En même temps un jeu de test c'est pas mal non plus :whistle:
Bon faute de temps on fait souvent l'impasse sur ces aspects là...

Tutoriels PowerShell

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

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