Avant de plonger dans la question, j'ai trouvé plusieurs autres questions qui semblent similaires aux miennes, mais elles n'ont pas pu résoudre mon problème. Voici des liens vers eux:
Exécutez à distance un script appelant "Exécuter en tant qu'administrateur"
Passons maintenant à la question: je dois exécuter un script Windows Update sur une machine distante via Powershell. Si je me connecte à distance à la machine via mstsc, exécute Powershell en tant qu'administrateur et exécute le script Windows Update, cela fonctionne très bien. Si je me connecte à distance à la machine via mstsc, exécute Powershell SANS choisir l'exécution en tant qu'administrateur et exécute le script, j'obtiendrai un tas d'erreurs le long de cette ligne: "Exception appelant" Télécharger "avec" 0 "argument (s):" Exception de HRESULT: 0x80240044 ""
Cela ne se produit que si je l'exécute SANS privilèges d'administrateur.
Le script que j'exécute est le suivant: http://www.ehow.com/how_8724332_use-powershell-run-windows-updates.html
Maintenant, lorsque je me connecte à distance à la machine à l'aide d'Enter-PSSession et que j'essaie d'exécuter le script, j'obtiens des erreurs, mais elles sont un peu différentes. Ils sont le long de cette ligne: "Exception appelant" CreateUpdateDownloader "avec" 0 "argument (s):" L'accès est refusé. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED)) ""
Je suis ouvert aux suggestions sur ce qui pourrait être à l'origine de ce problème, mais je pense que je l'ai compris. Je crois que la session Powershell doit être exécutée avec des privilèges élevés. Je sais comment faire cela lors de l'accès à distance via mstsc, mais je n'ai pas pu trouver un moyen de le faire via Enter-PSSession. J'ai googlé et googlé, mais je n'ai rien trouvé. Si quelqu'un pouvait aider à faire la lumière sur ce point, ce serait grandement apprécié.
http://msdn.Microsoft.com/en-us/library/windows/desktop/aa387288 (v = vs.85) .aspx
Il ne vous permet pas de l'appeler à distance.
C'est la raison. Vous pouvez le faire via une tâche planifiée.
Lorsque vous exécutez des commandes à distance, elles sont exécutées avec des privilèges administratifs car seuls les administrateurs sont autorisés à exécuter des commandes à distance dans powershell. L'erreur "Exception appelant" CreateUpdateDownloader "avec" 0 "argument (s):" L'accès est refusé. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED)) "" n'est pas une erreur de PowerShell native, cela indique que cette ligne échoue: $ UpdatesDownloader = $ UpdateSession.CreateUpdateDownloader (), cette ligne tente de créer l'objet de mise à jour à l'aide de $ UpdateSession = New-Object -ComObject objet Microsoft.Update.Session.
Sans savoir OERE le téléchargeur essaie de tendre la main, je ne peux que supposer le vaisseau-mère, cela peut indiquer que les informations d'identification que vous avez tout en étant connecté à distance à un serveur pourraient faire l'objet d'un proxy. Il s'agit d'une pratique de sécurité courante, les utilisateurs connectés à distance à des machines ne peuvent pas télécharger des éléments directement depuis Internet (quelle que soit la fiabilité de la source).
J'espère que cela vous aide, Chris
Pour exécuter des commandes Powershell à distance, vous DEVEZ exécuter en tant qu'administrateur sur la machine à partir de laquelle vous lancez les commandes, au moins dans la configuration prête à l'emploi. Il s'agit d'une limitation documentée de la communication à distance PowerShell, bien qu'il soit possible de détendre les valeurs par défaut si vous êtes déterminé, mais cela impliquera d'apporter des modifications à la configuration de PowerShell.
Pour l'exécution à distance, transmettez-vous des informations d'identification à l'aide du paramètre -credentials? par exemple.
Enter-PSSession -Credential(Get-Credential) -ComputerName <remotehost>
En ce qui concerne les mises à jour Windows sur les serveurs distants, j'ai pu le faire fonctionner en configurant un point de terminaison JEA sur le serveur distant pour qu'il s'exécute en tant que compte virtuel local.
De https://docs.Microsoft.com/en-us/powershell/scripting/learn/remoting/jea/session-configurations :
Compte virtuel local
Si les rôles pris en charge par ce point de terminaison JEA sont tous utilisés pour gérer la machine locale et qu'un compte d'administrateur local est suffisant pour exécuter les commandes avec succès, vous devez configurer JEA pour utiliser un compte virtuel local. Les comptes virtuels sont des comptes temporaires qui sont uniques à un utilisateur spécifique et ne durent que pour la durée de leur session PowerShell. Sur un serveur ou une station de travail membre, les comptes virtuels appartiennent au groupe Administrateurs de l'ordinateur local et ont accès à la plupart des ressources système. Sur un contrôleur de domaine Active Directory, les comptes virtuels appartiennent au groupe Administrateurs de domaine du domaine.
(1.) Créez une nouvelle configuration de session illimitée (et persistante!) Sur ComputerB (serveur distant):
New-PSSessionConfigurationFile -RunAsVirtualAccount -Path .\VirtualAccount.pssc
# Note this will restart the WinRM service:
Register-PSSessionConfiguration -Name 'VirtualAccount' [-ShowSecurityDescriptorUI] -Path .\VirtualAccount.pssc -Force
# Check the Permission property:
Get-PSSessionConfiguration -Name 'VirtualAccount'
# Those users will have full unrestricted access to the system!
(2.) Depuis ComputerA (client local), connectez-vous à notre configuration de session sans restriction sur ComputerB:
New-PSSession -ComputerName 'ComputerB' -ConfigurationName 'VirtualAccount' | Enter-PSSession
[ComputerB]: new-object -com "Microsoft.Update.Downloader" # Yay!
¹ copié de https://stackoverflow.com/a/60046097/1322112