Question Invoke-Command -AsJob avec AD

Plus d'informations
il y a 13 ans 2 mois #8791 par Legabs
Bonjour,

J'ai un problème lors de l'utilisation de la commande Invoke-Command avec le paramètre AsJob. Voici quelques explications.

Dans un shell, je lance la commande suivante :
[PS] C:\>[DirectoryServices.ActiveDirectory.Domain]::GetComputerDomain()

J'obtiens ce résultat :
Forest : forest.com
DomainControllers : {a.child.forest.com, b.child.forest.com, c.child.forest.com}
Children : {}
DomainMode : Windows2003Domain
Parent : forest.com
PdcRoleOwner : a.child.forest.com
RidRoleOwner : a.child.forest.com
InfrastructureRoleOwner : a.child.forest.com
Name : child.forest.com


J'essaye maintenant les trois commandes suivantes :
[PS] C:\>$j = Invoke-Command -ComputerName LOCALCOMPUTERNAME -ScriptBlock {[DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()} -AsJob
[PS] C:\>Wait-Job $j
[PS] C:\>Receive-Job $j


J'obtiens alors :
PSComputerName : localcomputername
RunspaceId : eb4fce2c-71cc-4f24-ad0e-c2a4e3aba833
PSShowComputerName : True
Forest : forest.com
DomainMode : Windows2003Domain
Name : child.forest.com


Comme vous pouvez le voir, en utilisant Remote PowerShell, je ne suis pas en mesure de lire les informations à propos des contrôleurs de domaine. C'est un problème majeur car lorsque j'essaie d'exécuter des Cmdlets Exchange 2007, j'obtiens des erreurs. Par exemple :
[PS] C:\>$j = Invoke-Command -ComputerName LOCALCOMPUTERNAME -ScriptBlock {Add-PSSnapin\"Microsoft.Exchange.Management.PowerShell.Admin\";Get-ExchangeServer} -AsJob
[PS] C:\>Wait-Job $j
[PS] C:\>Receive-Job $j


... me renvoie l'erreur :
An Active Directory error 0x80072020 occurred while searching for domain controllers in domain child.forest.com: An operations
error occurred.
+ CategoryInfo : NotSpecified: (0:Int32) [Get-ExchangeServer], ADTransientException
+ FullyQualifiedErrorId : 6108E80,Microsoft.Exchange.Management.SystemConfigurationTasks.GetExchangeServer


Il s'avère que j'ai commencé par essayer d'utiliser Start-Job pour effectuer mes traitements mais, en l'occurrence, il n'est pas possible d'effectuer d'Add-PSSnapin à travers cette commande ( connect.microsoft.com/PowerShell/feedbac...to-hang-indefinitely ).

Est-ce que quelqu'un aurait une idée pour m'aider à résoudre ce problème ?

Merci,

Gabriel

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

Plus d'informations
il y a 13 ans 2 mois #8828 par Arnaud Petitjean
Bonsoir Gabriel,

Question bête : \"As tu installé PowerShell 2 sur ton serveur Exchange 2007 ?\"
J'imagine que oui.

Si tel est le cas, as tu essayé de passer ces commandes en session distante intéractive (avec la commandelette Enter-PSSession) ?

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 13 ans 2 mois #8841 par Legabs
Réponse de Legabs sur le sujet Re:Invoke-Command -AsJob avec AD
Bonjour Arnaud, merci pour ton message,

La réponse a chacune de tes deux questions est oui.

J'utilise PowerShell V2 RTM.

D'autre part, le problème est le même quel que soit le type de session utilisé (distante interactive mais aussi implicite). A chaque fois il n'est pas possible de retrouver correctement les informations de l'AD. J'ai pourtant passé pas mal de temps sur le problème hier.
Je me suis posé la question de savoir si le souci ne venait pas du fait que le service d'exécution distante de PowerShell s'exécutait avec le compte NetworkService. Ce compte étant local, il était possible de s'imaginer que des problèmes d'accès à l'AD pouvait en résulter. Néanmoins comme il n'est pas possible de changer l'utilisateur de ce service pour un compte AD, il faut trouver d'autres pistes.
Il est, de plus, un comportement assez étrange ; si j'exécute le script suivant dans un Invoke-Command :
$d = [DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$d.FindAllDomainControllers()


... les DCs parviennent à être retrouvés !! :blink:

J'ai lu un document fort intéressant ( thoughtware.co.nz/Private/A%20layman%27s...202.0%20remoting.pdf ) qui semblait dire que l'authentification CredSSP pouvait être (\"For example, you use this type of authentication if you want to run a background job on a remote computer.\") une solution à mon problème. Je tourne malheureusement avec Windows 2003 et ce mécanisme n'y est pas présent.

J'ai donc eu beau retourner le problème dans tous les sens, il ne m'a pas été possible de trouver un embryon d'issue à mon problème... :(

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

Plus d'informations
il y a 13 ans 2 mois #8848 par Jacques Barathon
Bon, à la base ce n'est pas un bug mais une fonctionnalité... Je sais que c'est super contraignant et qu'en particulier ça bloque de nombreuses utilisations du remoting qu'on aurait pu envisager, mais à l'évidence c'est voulu, et en effet credSSP est la solution quand on a l'infra requise.

Pour les autres, un tout petit embryon de solution qui marche quand on essaie d'accéder aux ressources d'un serveur tiers (c'est-à-dire pas sa machine locale ni la machine distante sur laquelle on exécute la commande) :

[code:1]
PS> $pdc = [directoryservices.activedirectory.domain]::GetCurrentDomain().pdcroleowner.name
PS> $cred = get-credential
PS> invoke-command -comp localhost -script {param($pdc, $cred) net use \\$pdc\ipc$ /user:$($cred.username) $($cred.getnetworkcredential().password); net view \\fileserver} -args $pdc, $cred
The command completed successfully.

Shared resources at \\fileserver


Share name Type Used as Comment
...
[/code:1]

C'est très tiré par les cheveux, et ça ne permet pas de tout faire (notamment, la commande que tu tapes pour obtenir la liste des DC ne marche toujours pas), mais c'est un début de dépannage...

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

Plus d'informations
il y a 13 ans 2 mois #8864 par Legabs
Réponse de Legabs sur le sujet Re:Invoke-Command -AsJob avec AD
Bonjour,

Merci Janel pour ta réponse. Malheureusement cela ne va pas me permettre de résoudre mon souci.

J'ai bien l'impression que je suis condamné à faire mes opérations séquentiellement ou bien à installer un Windows Server 2008. :unsure: À moins que quelqu'un ait une autre idée ??

C'est tout de même dommage que les choses soient autant limitées sur 2003. Enfin...

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

Plus d'informations
il y a 13 ans 2 mois #8878 par Arnaud Petitjean
Bonsoir Gabriel,

Effectivement tu es victime du \"double hop effect\". C'est à dire que tu ne peux utiliser des commandes qui \"font appel\" au réseau lorsque tu es déjà en remoting.

Pour passer outre cette \"fonctionnalité\" (dixit Janel) il faut utiliser CredSSP. Et comme tu utilises Windows Server 2003 tu es coincé.
Il te faut une version Windows Server 2008 minimum pour utiliser CredSSP.

Je suis désolé, mais je ne connais pas d'autre solution.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

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