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

Plus d'informations
il y a 17 ans 5 mois #2919 par exca
Bonjour

Je commence le powershell et j'ai un peu de mal a retrouvé mes billes.

Je voudrais lister l'arbo de la registry.
Je m'explique, je voudrais toucher la clé \"KEY_USERS\<userX>\Control Panel\Desktop\ScreenSaveTimeOut\" (enfin celle la ou une autre ). Je partirais sur un foreach depuis le root de KEY_USERS

[code:1]
KEY_USERS
\_.DEFAULT
\_Control Panel
\_Desktop
\_ScreenSaveTimeOut
\_S-1-plop
\_Control Panel
\_Desktop
\_ScreenSaveTimeOut
\_S-1-plop1
\_Control Panel
\_Desktop
\_ScreenSaveTimeOut
\_etc ...
[/code:1]

Donc je coderais un truc du genre en speudo-langage batch+powershell (désolé)
[code:1]
SET INI=c:\listemachines.ini
For /F %%i in (%INI%) do (
$distant=[microsoft.win32.registrykey]::openremotebasekey(\"USERS\",\"%%i\"«»)
foreach ($distant.subdir) # en gros les repertoires (.DEFAULT et autre \"repertoire\" \"S-1-1-...\"«»)
{
$val=$distant.opensubkey($distant.subdir.\"\Control Panel\Desktop\\"«»)
$val.setvalue(\"200\"«»)
}


)
[/code:1]



Y a moyen de faire ca ?

Merci a tous

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

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

Y a moyen de faire ca ?

Oui voir ce post
powershell-scripting.com/index.php?optio...575&catid=5#2575

pour
[code:1]
SET INI=c:\listemachines.ini
[/code:1]
Voir le cmdlet Get-Content
ou + rapide
[code:1]
Foreach($Serveur IN ${c:\listemachines.ini})
{Echo $serveur}
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 5 mois #2929 par exca
Bon j'ai suivi te conseils et ca marche presque je dirais :) enfin je me tape encore des exception


[code:1]
$computername = (get-wmiobject win32_computersystem).name

if ( \"$computername\" -ieq \"machineVlan1\" ) { $ini = \"c:\front_include_CA.ini\"}
if ( \"$computername\" -ieq \"machineVlan1\" ) { $ini = \"c:\middle_back_include_CA.ini\"}

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


Foreach( $serveur IN (Get-Content -Path $ini) ) #pas trouvé comment ignorer les ligne vides
{
if ($serveur.length -gt 0) # du coup je triche :«»)
{
$regKey = [microsoft.win32.registrykey]::openremotebasekey($type, $serveur)
$regKey = $regKey.OpenSubKey($key)
Write-Host \"User's key of $serveur\"
Write-Host \"
\"
Foreach( $subkey in $regKey.GetSubKeyNames())
{
# on vire les clef \"*_Classes\"
if ( ($subkey.length -ge 8) -and ( $subkey.substring( ($subkey.length - 8), $subkey.length) -ine \"_Classes\" ) )
{ #comme on a les user on va changer la valeur ici
$regKey1 = [microsoft.win32.registrykey]::openremotebasekey($type, $serveur)
$regKey1 = $regKey1.OpenSubKey(\"$subkey\"\"$key_end\"«») #ca doit surement foiré ici
Write-Host \"$chaine -> \"$regKey1.GetValue(\"$chaine\"«»)
}

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



j'ai une exception

Exception calling \"Substring\" with \"2\" argument(s): \"Index and length must refer to a location within the string.
Parameter name: length

au niveau du [code:1]if ( ($subkey.length -ge 8) -and ( $subkey.substring( ($subkey.length - 8), $subkey.length) -ine \"_Classes\" ) )[/code:1]


et une autre

You cannot call a method on a null-valued expression.

au niveau de [code:1]Write-Host \"$chaine -> \"$regKey1.GetValue(\"$chaine\"«»)[/code:1]

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

Plus d'informations
il y a 17 ans 5 mois #2930 par exca
En tout cas merci du coup de main

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

Plus d'informations
il y a 17 ans 5 mois #2931 par Laurent Dardenne
Pour les lignes vide
[code:1]
get-content \"file\"|? {!$_ -eq [String]::Empty)
[/code:1]
voir aussi avec select-string mais c'est plus tordu je pense.
Pour ceci :
[code:1]
Write-Host \"$chaine -> \"$regKey1.GetValue(\"$chaine\"«»)
[/code:1]
essaie
[code:1]
Write-Host \"$chaine -> $($regKey1.GetValue(\"$chaine\"«»))\"
[/code:1]
Et sur le substring faut débugger :lol:
$host.EnterNestedPrompt peut t'aider, place cet appel avant le traitement en cause, et saisie Exit pour continuer le script.

Sinon dans ton test de début, tu as deux fois 'machineVlan1' c'est voulu ?

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 5 mois #2933 par Laurent Dardenne
en lieu et place de ceci
[code:1] get-content \"file\"|? {!$_ -eq [String]::Empty)[/code:1]
faire
[code:1]
get-content t2.txt|? {$_ -notmatch \"^[\s]*$\"}
[/code:1]
Ce qui prend en compte les lignes avec des tabulations uniquement ou avec qq espaces uniquement ou juste un retour chariot, cas de la première proposition.

Tutoriels PowerShell

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

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