Pergunta

Ok, aqui está o meu problema:

Estou tentando executar um script remotamente em um servidor.

Sou administrador em ambas as caixas, as exceções do firewall estão em vigor, o administrador remoto está ativado e tudo o mais parece bom que posso ver.

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

Eu continuo recebendo o seguinte erro em troca

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

O servidor em que está tentando executar é uma caixa de servidor 2K8 R2 e acho que o problema é um problema do UAC. Existe alguma maneira de executar isso como administrador sem ter que clicar em Sim em uma caixa UAC?

Esse código de código acabará se tornando um script que terá que ser completamente automatizado.

Qualquer ajuda seria muito apreciada.

Foi útil?

Solução

OK. Depois de algumas pesquisas e testes, descobri o problema. Depois de desativar o UAC e o firewall e o script ainda não funcionando, caí um pouco mais fundo e descobri que a questão principal era a maneira como o Invoke-Command administra os comandos. Ele usa as credenciais da pessoa que executa o script para se autenticar para o servidor tenta usar outra conta para executar as permissões ou diminuir os privilégios do usuário para que certos comandos não possam ser executados.

Eu adicionei a mudança -credencial para o comando Invoke e tudo está funcionando muito bem agora. Exemplo de código corrigido abaixo:

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

Outras dicas

este Parece indicar que você precisa garantir que você seja um administrador local na máquina remota (embora reconhecidamente isso seja para WMI especificamente). De acordo com isto Você pode alterar uma chave de registro para impedir que o UAC se aplique a logons remotos para administradores (pesquise o localAccountTokenFilterPolicy). Isso não deve desativar o UAC simplesmente não filtrar o token se você usar o PowerShell/WMI remotamente com uma conta de administrador.

Defina a opção "EnableLua" (valor do DWORD) encontrado em HKLM Software Microsoft Windows CurrentVersion Policies System como 0 e reinicie.

Isso desabilitará a UAC sem problemas, eu faria isso por todos os seus usuários, seja com ou sem permissão depende de você, porque o Vista UAC é tão horrível que eu acredito que menos pessoas que o têm melhor (pelo menos em Vista) eles são. Este truque também funciona no Win7.

Divirta -se com meu truque de registro :)

PS: Como se vê, a censura comentários que mostram como desativar a UAC no que diz respeito à minha postagem/tópico com a resposta acima (uma resposta diligente foi removida).

Existe alguma maneira de executar isso como administrador sem ter que clicar em Sim em uma caixa UAC?

Se isso fosse possível, derrotaria inteiramente o ponto da UAC.

Assim, parece que sua única solução real é desativar a UAC na caixa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top