Question Résolu : The remote procedure call failed.

Plus d'informations
il y a 15 ans 6 mois #7647 par Eric_K
Bonjour à tous,

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.

Plus d'informations
il y a 15 ans 6 mois #7648 par Laurent Dardenne
Salut,
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.

Plus d'informations
il y a 15 ans 6 mois #7649 par Eric_K
Merci Laurent,

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 : \&quot;The remote procedure call failed\&quot; 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.

Plus d'informations
il y a 15 ans 6 mois #7650 par Laurent Dardenne
Eric_K écrit:

Encore merci Laurent.

Là c'est plutôt Google ;)

Tutoriels PowerShell

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

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