Question
Résolu : The remote procedure call failed.
- Eric_K
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 9
- Remerciements reçus 0
J'utilise Powershell Version 2 (avec powershell_ise) sur un poste XP pro membre d'un domaine.
Je souhaite ajouter des utilisateurs locaux dans des groupes locaux sur des serveurs membres du domaine.
Voici le script que j'utilise :
[code:1]
# This script allows you to create one or several local users
# on one or several computers listed in the LocalUser(s).txt
# file and adds them to a specific group. It sets the \"Password
# never expires\" property for all user accounts and enables
# or disables the user account (value True or false).
$file = \"LocalUser(s).txt\"
$name = import-csv -path $file
foreach($strUser in $name)
{
$computer = $struser.computername
$name = $struser.username
$fullname = $struser.fullname
$password = $struser.password
$description = $struser.description
$group = $struser.group
$ObjOU = [ADSI](\"WinNT://$computer\"«»)
$objUser = $objOU.Create(\"User\", $name)
$objUser.setpassword($password)
$objUser.put(\"description\", $description)
$objUser.put(\"fullname\", $fullname)
$objUser.SetInfo()
$ObjUser = [ADSI](\"WinNT://$computer/$name\"«»)
$objGroup = [ADSI](\"WinNT://$computer/$group\"«»)
$objGroup.psbase.invoke(\"Add\",$ObjUser.psbase.path)
}
foreach($strUser in $name)
{
$User1 = [ADSI]\"WinNT://$computer/!USERTEST1!,user\"
$User1.psbase.InvokeSet(\"AccountDisabled\",$True)
$User1.SetInfo()
$Never_Expire = 0x10000
$User1.UserFlags.value = $User1.UserFlags.value -BOR $Never_Expire
$User1.SetInfo()
$User2 = [ADSI]\"WinNT://$computer/!USERTEST2!,user\"
$User2.psbase.InvokeSet(\"AccountDisabled\",$False)
$User2.SetInfo()
$Never_Expire = 0x10000
$User2.UserFlags.value = $User2.UserFlags.value -BOR $Never_Expire
$User2.SetInfo()
}
[/code:1]
Voici le fichier texte utilisé (LocalUser(s).txt) stocké dans la variable $file au début du script.
COMPUTERNAME,USERNAME,FULLNAME,PASSWORD,DESCRIPTION,GROUP
SRV1,!USERTEST1!,,PaSword_1234,\"TEST USER\",Administrators
SRV1,!USERTEST2!,,PaSword_1234,\"TEST USER\",Guests
SRV1,!USERTEST3!,,PaSword_1234,\"TEST USER\",Users
Mon problème est le suivant :
Lorsque j'exécute ce script à partir de mon poste XP vers des serveurs membres du domaine qui se trouvent sur le même sous-réseau que mon poste je n'ai aucun problème. Par contre, quand je l'exécuter vers des serveurs qui se trouvent sur un autre sous-réseau, le message suivant s'affiche de manière aléatoire :
[code:1]
Exception calling \"Invoke\" with \"2\" argument(s): \"The remote procedure call failed.
\"
At O:\Admin\Scripts\CreateLocalUser\LocalUser(s)Creation.ps1:24 char:29
+ $objGroup.psbase.invoke <<<< (\"Add\",$ObjUser.psbase.path)
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
[/code:1]
(A la place du Smiley il faut lire deux points encadrés par des paranthèses)
Je dis, de manière aléatoire, car sur le même serveur il va réussir à créer 2 utilisateurs et les mettre dans les bons groupes mais pour le 3 ème utilisateur sur le même serveur il ne va pas le mettre dans le groupe spécifié dans le fichier texte, l'utilisateur n'est mis dans aucun groupe.
D'où peut venir le problème ?
Merci à vous pour votre aide.
Cordialement.
Eric_K<br><br>Message édité par: Eric_K, à: 24/08/10 14:14
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
j'ai trouvé ceci:
support.microsoft.com/kb/911799
technet.microsoft.com/en-us/library/cc940524.aspx
Pour tracer l'erreur peut être que ceci peut aider:
msdn.microsoft.com/en-us/library/aa373803(VS.85).aspx
Sinon je n'ai rien trouvé sur MS-Connect à ce sujet.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Eric_K
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 9
- Remerciements reçus 0
Je n'ai pas les mêmes messages d'erreur que ceux mentionnés dans les liens mais, ça a été une piste.
Mon problème est résolu. Et voici comment il l'a été.
Il faut effectivement savoir que lorsque le service RPC est appelé lors de commandes exécutées par le script, il écoute sur plusieurs ports générés aléatoirement.
Voici un exemple d'événement dans le journal d'événements Sécurité :
The Windows Firewall has detected an application listening for incoming traffic.
Name: -
Path: C:\WINDOWS\system32\svchost.exe
Process identifier: 764
User account: NETWORK SERVICE
User domain: NT AUTHORITY
Service: Yes
RPC server: No
IP version: IPv4
IP protocol: UDP
Port number: 58562
Allowed: No
User notified: No
For more information, see Help and Support Center at go.microsoft.com/fwlink/events.asp.
J'ai donc autorisé sur le firewall de mon poste xp le port TCP 445 dans les exceptions (File and Printer Sharing, Edit).
Et je n'ai plus eu de message : \"The remote procedure call failed\" lors de l'exécution de mon script.
Voilà, j'espère que ceci en aidera d'autres si ce message apparaît lors d'accès à des serveurs sur d'autres sous-réseaux que celui d'où est exécuté le script.
Autres infos : lors de mes recherches concernant ce problème j'ai aussi vu qu'il était possible de paramétrer RPC pour qu'il utilise des ports fixes et non pas générés aléatoirement.
Encore merci Laurent.
Cordialement.
Eric_K<br><br>Message édité par: Eric_K, à: 24/08/10 13:16
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Là c'est plutôt GoogleEncore merci Laurent.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Résolu : The remote procedure call failed.