Exécutez la commande en tant qu'administrateur dans le script PowerShell. Contrôle de compte d'utilisateur

OK, voici mon problème:

j'essaie d'exécuter un script à distance sur un serveur.

je suis un administrateur sur les deux boîtes, les exceptions du pare-feu sont en place, l'administrateur à distance est activé, et tout le reste semble bon que je peux voir.

invoke-command -ComputerName $ComputerName -ScriptBlock `
{
    cd C:WindowsSystem32inetsrv; 
    ./appcmd.exe ADD vdir /app.name:<SiteName>/ /path:/<VDir Name> /physicalPath:<Path to files>
}

je continue à recevoir l'erreur suivante en retour

ERROR ( hresult:80070005, message:Failed to commit configuration changes. Access is denied.

le serveur sur lequel il essaie de s'exécuter est une boîte 2K8 R2 du serveur et je pense que le problème est un problème UAC. Est-il de toute façon à obtenir une exécution en tant qu'administrateur sans avoir à cliquer oui sur une boîte UAC?

ce morceau de code deviendra éventuellement un script qui devra être complètement automatisé.

Toute aide serait grandement appréciée.

10
demandé sur Tim 2010-02-12 01:05:25

4 réponses

OK. Après des recherches et des tests, j'ai résolu le problème. Après avoir désactivé UAC et le pare-feu et le script qui ne fonctionnait toujours pas, j'ai creusé un peu plus et découvert que le problème principal était la façon dont invoke-command exécute les commandes. il utilise les informations d'identification de la personne qui exécute le script pour s'authentifier sur le serveur tente d'utiliser un autre compte pour exécuter les autorisations ou diminue les privilèges de l'utilisateur, de sorte que certaines commandes ne peuvent pas être exécutés.

j'ai ajouté de l' - Les pouvoirs passent à la commande invoke et tout fonctionne bien maintenant. Exemple de code corrigé ci-dessous:

$user = New-Object Management.Automation.PSCredential("$UserName", $securePassword)
invoke-command -ComputerName $ComputerName -Credential $user -ScriptBlock ` 
{ 
    cd C:\Windows\System32\inetsrv\;  
    ./appcmd.exe ADD vdir /app.name:<SiteName>/ /path:/<VDir Name> /physicalPath:<Path to files> 
} 
10
répondu Tim 2010-02-13 15:53:15

semble indiquer que vous devez vous assurer que vous êtes un administrateur local sur la machine distante (bien qu'il soit vrai que c'est pour WMI spécifiquement). Selon vous pouvez modifier une clé de Registre pour empêcher UAC de s'appliquer aux connexions à distance pour les administrateurs (rechercher LocalAccountTokenFilterPolicy). Cela ne devrait pas désactiver UAC tout simplement pas filtrer le token si vous utilisez powershell/WMI à distance avec un compte administrateur.

0
répondu tyranid 2010-02-11 22:24:15

définissez l'option "EnableLUA" (valeur DWORD) trouvée dans HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System à 0 et redémarrez.

cela va désactiver UAC sans problème, je le ferais pour tous vos utilisateurs, que ce soit avec ou sans permission est à vous, parce que le UAC vista est si horrible que je crois que moins les gens qui l'ont sur le meilleur (au moins dans vista ) ils sont. Ce truc fonctionne aussi dans Win7.

amusez-vous avec mon tour d'enregistrement :)

P. S.: Il s'avère qu'il en est de même des commentaires de censure qui montrent comment désactiver UAC en ce qui concerne mon post/thread avec la réponse ci-dessus est concerné (une réponse diligente a été supprimée).

-3
répondu Erx_VB.NExT.Coder 2012-05-23 19:07:07

y a-t-il de toute façon pour que cela fonctionne en tant qu'administrateur sans avoir à cliquer oui sur une boîte UAC?

si cela était possible, cela irait totalement à l'encontre de L'UAC.

ainsi, il semblerait que votre seule vraie solution soit de désactiver UAC sur la boîte.

-4
répondu Anon. 2010-02-11 22:06:52