Question invoke-command et objet : accès refusé

Plus d'informations
il y a 7 ans 1 mois #28195 par Arnaud Petitjean
Hello !

Avec ce code, c'est probablement normal que tu n'aies pas de résultat.

[code:1]
Invoke-Command -ComputerName localhost -Credential $cred -ScriptBlock {Get-ChildItem}[/code:1]


Si tu exécutes juste la commande Get-ChildItem comme tu le fais, tu récupères les fichiers et dossiers présents dans ton répertoire $home (ton chemin par défaut lorsque tu démarres PowerShell). Essaie plutôt de faire [code:1]Get-Childitem C:\[/code:1]

Si ensuite tu veux vraiment vérifier que tu as ou pas un problème de double-hop essaie de lister les fichiers d'une machine distante comme :

[code:1]
Invoke-Command -ComputerName localhost -Credential $cred -ScriptBlock {Get-ChildItem \\myServer\sharename}[/code:1]

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 7 ans 1 mois #28198 par percherie
Merci pour l'explication

J'ai fait une petite modification car correspondant mieux à l'usage final. J'appelle le script à distance sur une station au lieu de localhost et j'ai bien le contenu du disque de la station.

[code:1]Invoke-Command -ComputerName 740-6B4BP3J -Credential $cred -ScriptBlock {
Write-Host \"Contenu du disque C de 740-6B4BP3J\"
Get-ChildItem c:\
}[/code:1]

Est-ce que je peut en conclure que le double hop est résolu ? Pourtant le code suivant posté au début du fil de discussion retourne le même code erreur.


Question complémentaire, mais à ne pas répondre si cela va perturber la résolution du problème. Je me suis amusé à tester

[code:1]Invoke-Command -ComputerName 740-6B4BP3J -Credential $cred -ScriptBlock {
Write-Host \"Contenu du disque C de D101-P01 depuis 740-6B4BP3J\"
Invoke-Command -ComputerName localhost -Credential $cred -ScriptBlock {Get-ChildItem \\d101-p01\c$}
}[/code:1]

Qui retourne le message d'erreur suivant alors que j'ai bien accès à \\d101-p01\c$ depuis le serveur

[code:1]Impossible de trouver le chemin d'accès « \\d101-p01\c$ », car il n'existe pas.
+ CategoryInfo : ObjectNotFound: (\\d101-p01\c$:«»String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
+ PSComputerName : 740-6B4BP3J[/code:1]

Message édité par: percherie, à: 15/02/19 08:08<br><br>Message édité par: percherie, à: 15/02/19 08:08

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

Plus d'informations
il y a 7 ans 1 mois #28199 par percherie
Information complémentaire. Le Get-Member de l'objet me retourne

[code:1] TypeName : System.__ComObject#{918efd1e-b5d8-4c90-8540-aeb9bdc56f9d}

Name MemberType Definition PSComputerName
----


CreateUpdateDownloader Method IUpdateDownloader CreateUpdateDownloader () 740-6B4BP3J
CreateUpdateInstaller Method IUpdateInstaller CreateUpdateInstaller () 740-6B4BP3J
CreateUpdateSearcher Method IUpdateSearcher CreateUpdateSearcher () 740-6B4BP3J
CreateUpdateServiceManager Method IUpdateServiceManager2 CreateUpdateServiceManager () 740-6B4BP3J
QueryHistory Method IUpdateHistoryEntryCollection QueryHistory (string, int, int) 740-6B4BP3J
ClientApplicationID Property string ClientApplicationID () {get} {set} 740-6B4BP3J
ReadOnly Property bool ReadOnly () {get} 740-6B4BP3J
UserLocale Property uint UserLocale () {get} {set} 740-6B4BP3J
WebProxy Property IWebProxy WebProxy () {get} {set} 740-6B4BP3J[/code:1]

J'ai bien un retour avec la Method CreateUpdateServiceManager et avec la Property ReadOnly. Il semble que le double hop soit pris en compte mais avec la Method CreateUpdateDownloader cela échoue lamentablement. Peut être qu'il manque un argument si je me réfère au retour erreur ?

[code:1]Exception lors de l'appel de «CreateUpdateDownloader» avec «0» argument(s): «Accès refusé. (Exception de HRESULT :
0x80070005 (E_ACCESSDENIED))»
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
+ PSComputerName : 740-6B4BP3J[/code:1]

Message édité par: percherie, à: 15/02/19 08:38<br><br>Message édité par: percherie, à: 15/02/19 08:38

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

Plus d'informations
il y a 7 ans 1 mois #28200 par Arnaud Petitjean
Hello !

Bon, alors on reprend :)

Le problème du double-hop apparait seulement lorsqu'à partir d'une machine distante tu cherches à accéder à une ressource réseau.

Donc dans ton cas 1, soit :
[code:1]
Invoke-Command -ComputerName 740-6B4BP3J -Credential $cred -ScriptBlock {
Write-Host \&quot;Contenu du disque C de 740-6B4BP3J\&quot;
Get-ChildItem c:\
}
[/code:1]

Ici il n'y a pas de souci de double-hop puisque tu accèdes juste au C:\ de la machine.

En revanche dans le cas ci-après, on est pile poil dans le problème du double saut :
[code:1]
Invoke-Command -ComputerName 740-6B4BP3J -Credential $cred -ScriptBlock {
Write-Host \&quot;Contenu du disque C de 740-6B4BP3J\&quot;
Get-ChildItem \\serveur\share
}
[/code:1]

Pour contourner cet ennuyeux problème, il faut en effet comme tu as essayé de le faire, retransmettre tes credentials.
J'en profite pour remettre le lien vers un billet de blog qui explique très bien le problème et ses solutions potentielles : PowerShell Remoting Kerberos Double Hop Solved Securely

Dans ton second essai, tu es clairement confronté au problème du double saut car tu n'as pas réussi à retransmettre correctement tes credentials.

En effet, tu as oublié d'utiliser la portée Using qui permet d'accéder à une variable hors de ton scope.

Donc essaie ceci plutôt :
[code:1]
Invoke-Command -ComputerName 740-6B4BP3J -Credential $cred -ScriptBlock {

Write-Host \&quot;Contenu du disque C de D101-P01 depuis 740-6B4BP3J\&quot;

Invoke-Command -ComputerName d101-p01 -Credential $Using:cred -ScriptBlock {Get-ChildItem C:\}

}

[/code:1]

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 7 ans 1 mois #28251 par percherie
En effet je viens de tester et merci je viens de mieux saisir la gestion du double HOP.

En revenant sur mon problème d'origine. Depuis le serveur, je souhaite faire exécuter sur une station distante la recherche de mise à jour système via les commandes suivante

[code:1]
$Session = New-Object -ComObject microsoft.Update.Session
$Session.CreateUpdateDownloader()
[/code:1]

J'ai donc tenté
[code:1]
Invoke-Command -ComputerName 740-6B4BP3J -Credential $cred -ScriptBlock {
$Session = New-Object -ComObject Microsoft.Update.Session
$Session.CreateUpdateDownloader()
}
[/code:1]

ou bien

[code:1]
Invoke-Command -ComputerName 740-6B4BP3J -Credential $cred -ScriptBlock {
Invoke-Command -ComputerName localhost -Credential $Using:cred -ScriptBlock {
$Session = New-Object -ComObject Microsoft.Update.Session
$Session.CreateUpdateDownloader()
}
}
[/code:1]

Qui à chaque fois me retourne me message d'erreur

Exception lors de l'appel de «CreateUpdateDownloader» avec «0» argument(s): «Accès refusé. (Exception de HRESULT :
0x80070005 (E_ACCESSDENIED))»
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
+ PSComputerName : 740-6B4BP3J


Le problème a été abordé sur social.technet.microsoft.com/Forums/wind...=winserverpowershell mais je n'ai pas retiré d'informations pouvant m'aider.

Ps : Merci Arnaud pour le temps passer, ça m'a pas l'air d'être un problème facile à résoudre.<br><br>Message édité par: percherie, à: 19/02/19 12:28

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

Plus d'informations
il y a 7 ans 1 mois #28256 par Arnaud Petitjean
Hello !

Non en effet, ce n'est pas un problème simple à résoudre.

J'ai fait quelques tests et j'ai réussi à reproduire exactement ton problème. Malheureusement je n'ai pas réussi à faire marcher le code dans une session PowerShell à distance.

Pourtant je suis pratiquement certain (à 99%) que ce n'est pas le problème de double-saut qui bloque.

Peut-être est-ce simplement lié à COM qui refuse d'être exécuté dans un contexte distant ?

Désolé de ne pas pouvoir t'aider davantage sur le sujet...

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.060 secondes
Propulsé par Kunena