OpenRemoteBaseKey() références
Je suis d'essayer d'utiliser powershell pour un accès à distance au registre comme suit:
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $server)
$key = $reg.OpenSubkey($subkeyPath)
En fonction de certains facteurs que je ne suis pas encore en mesure de déterminer soit je obtenir
Exception d'appeler "OpenSubKey" avec "1" argument(s): "Demande d'accès au registre n'est pas autorisé."
Ou
Système.UnauthorizedAccessException: avez Essayé d'effectuer une opération non autorisée.
chez Microsoft.Win32.RegistryKey.Win32ErrorStatic(Int32 errorCode, String str)
chez Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(RegistryHive hKey, Chaîne machineName)
Il semble assez clair que c'est parce que l'utilisateur je suis l'exécution du script powershell en tant que n'ont pas les informations d'identification appropriées pour accéder à distance au registre. J'aimerais être en mesure de fournir un ensemble d'informations d'identification à utiliser pour accéder à distance au registre, mais je ne peux trouver aucune documentation n'importe où d'une façon de le faire. Je suis également pas clair sur exactement où pour spécifier qui les utilisateurs sont autorisés à accéder à distance au registre.
OriginalL'auteur sgibbons | 2009-07-15
Vous devez vous connecter pour publier un commentaire.
Juste pensé que je voudrais ajouter ma réponse à personne avec ce problème. Il semble y avoir aucun moyen d'ajouter des informations d'Identification à l'aide de RemoteRegistry. Vous pouvez cependant utiliser WMI pour interroger un registre à distance à l'aide d'autres informations d'identification comme suit:
De là, vous pouvez appeler le standard de Registre méthodes. L'exemple ci-dessous sera de retour le système d'exploitation.
Espère que cela aide quelqu'un 🙂
OriginalL'auteur Ben Taylor
Vous exécutez le service registre distant? Il est désactivé par défaut et qui doit être la cause du problème. Vérifier l'état de ce service sur tous les ordinateurs distants, vous tentez d'accéder.
OriginalL'auteur ravikanth
Je n'arrivais pas à commenter directement sur bentaylr de l'entrée ci-dessus, mais j'ai pris ce qu'il a contribué et a ajouté PSCredentials création (compris à partir de ici) pour vous permettre de coder en dur les informations d'identification dans le script.
De la paix de l'esprit avertissement: soyez prudent lors de l'utilisation de données d'authentification en clair dans un script. Dans mon cas, je suis en utilisant les informations d'identification génériques sur les machines, je suis le lancement. Selon votre cas, vous pouvez envisager la création d'un cryptée des informations d'identification de fichier pour stocker les mots de passe (voir le lien ci-dessus).
Les informations d'identification que vous utilisez doit être en mesure d'accéder à la base de registre si vous étiez connecté à cet utilisateur sur la machine cible.
OriginalL'auteur ddncn
OverloadDefinitions
essayer
http://msdn.microsoft.com/en-us/library/xthy8s8d%28v=vs.110%29.aspx
OriginalL'auteur Hansel
$key.OpenSubKey($nomsousclé) ouvre la sous-clé dans l'écriture en mode protégé,
$key.OpenSubKey($nomsousclé,$true) l'ouvre en écriture en mode
Donc après la touche$.OpenSubKey($nomsousclé,$true), vous devez être en mesure de créer une nouvelle sous-clé ou la valeur
Si vous essayez la même chose après la touche$.OpenSubKey($nomsousclé), vous obtiendrez "UnauthorizedAccessException"
OriginalL'auteur Wolfgang K
Est venu chercher la réponse à votre question, mais en un peu googler ce matin, j'ai remarqué que le premier paramètre est un type plutôt qu'une Chaîne... espérons que cela aide:
OriginalL'auteur pmorrisonfl
Je voulais d'abord remercier tous pour les réponses ci-dessus sont très utiles, voulais ajouter que vous pouvez utiliser la commande Get-Credential pour collecter des informations d'identification sans avoir à coder en dur dans le script. J'ai écrit en utilisant les conseils ci-dessus dans mon script le code suivant et requête:
Le code ci-dessus renvoie toutes les sous-clés dans les noms de la clé spécifiée afin que je puisse déterminer les mises à jour installées autres que les OS qui ont été appliqués à un serveur. Si vous souhaitez déterminer collection de toutes les possibilités avec le $objReg variable de lancer:
Vous verrez une liste de toutes les requêtes qui peuvent être effectuées sur le registre. Espérons que cette aide!
OriginalL'auteur user5790768