Exécutez PowerShell à distance en tant qu'administrateur

14

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»

/programming/10724591/how-to-remote-execute-an-elevated-remote-script-in-powershell

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" Download "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 en utilisant 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 l'avoir 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é.

Jon
la source
Je ne suis pas sur une console pour tester, mais si vous obtenez une session etsn distante (Enter-PSSession), vous pouvez alors taper "Start-Process PowerShell –Verb RunAs" et appuyer sur Entrée. Cela vous donne-t-il l'invite de l'administrateur? Si c'est le cas, je vais changer cela en une réponse que vous pouvez accepter. Sinon, je testerai quand je serai de retour à mon bureau.
TheCleaner
Réponse possible ici serverfault.com/a/474031/23300
Nic

Réponses:

3

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 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

Christopher Douglas
la source
2

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>
Stephen Connolly
la source
Avec Windows 2012 Server et sans configuration AD, essayez d'utiliser «MicrosoftAccount \ Administrator» comme informations d'identification et utilisez le mot de passe de l'administrateur distant. Utiliser le nom d'utilisateur complet sans AD m'a toujours semblé être un tracas inutile.
fuero
1

Concernant 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.

Depuis 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 suffit 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 pendant la durée de leur session PowerShell. Sur un serveur ou un poste 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.

Quickfix¹:

(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é depuis /programming//a/60046097/1322112

jsmitty
la source
Cela m'a aidé! Merci de me rappeler que JEA est super!
B_Dubb42