Question
invoke-command et objet : accès refusé
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 7 ans 1 mois #28195
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet Re:invoke-command et objet : accès refusé
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]
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.
- percherie
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 7 ans 1 mois #28198
par percherie
Réponse de percherie sur le sujet Re:invoke-command et objet : accès refusé
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
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.
- percherie
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 7 ans 1 mois #28199
par percherie
Réponse de percherie sur le sujet Re:invoke-command et objet : accès refusé
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
[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.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 7 ans 1 mois #28200
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet Re:invoke-command et objet : accès refusé
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 \"Contenu du disque C de 740-6B4BP3J\"
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 \"Contenu du disque C de 740-6B4BP3J\"
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 \"Contenu du disque C de D101-P01 depuis 740-6B4BP3J\"
Invoke-Command -ComputerName d101-p01 -Credential $Using:cred -ScriptBlock {Get-ChildItem C:\}
}
[/code:1]
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 \"Contenu du disque C de 740-6B4BP3J\"
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 \"Contenu du disque C de 740-6B4BP3J\"
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 \"Contenu du disque C de D101-P01 depuis 740-6B4BP3J\"
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.
- percherie
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 7 ans 1 mois #28251
par percherie
Réponse de percherie sur le sujet Re:invoke-command et objet : accès refusé
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
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
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.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 7 ans 1 mois #28256
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet Re:invoke-command et objet : accès refusé
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
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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- invoke-command et objet : accès refusé