11

好的,这是我的问题:

我正在尝试在服务器上远程运行脚本。

我是这两个盒子的管理员,防火墙例外到位,远程管理已启用,其他一切看起来都不错。

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

我不断收到以下错误作为回报

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

它尝试运行的服务器是服务器 2k8 R2 机器,我认为问题是 UAC 问题。有没有办法让它以管理员身份运行,而不必在 UAC 框上单击“是”?

这段代码最终将成为一个必须完全自动化的脚本。

任何帮助将不胜感激。

4

4 回答 4

10

好的。经过一些研究和测试,我发现了这个问题。在禁用 UAC 和防火墙并且脚本仍然无法工作后,我深入挖掘并发现主要问题是调用命令运行命令的方式。它使用运行脚本的人的凭据对服务器进行身份验证,然后尝试使用另一个帐户来运行权限或降低用户的权限,以便无法运行某些命令。

我在调用命令中添加了 -Credentials 开关,现在一切正常。更正的代码示例如下:

$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> 
} 
于 2010-02-13T15:53:15.730 回答
0

似乎表明您需要确保您是远程计算机上的本地管理员(尽管诚然这是专门针对 WMI 的)。据此,可以更改注册表项以停止 UAC 应用到管理员的远程登录(搜索 LocalAccountTokenFilterPolicy)。如果您使用管理员帐户远程使用 powershell/WMI,那不应该禁用 UAC,只是不过滤令牌。

于 2010-02-11T22:24:15.767 回答
-3

将 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 中的选项“EnableLUA”(DWORD 值)设置为0并重新启动。

这将毫无问题地禁用 UAC,我会为您的所有用户执行此操作,无论是否有许可由您决定。

这个技巧也适用于 Windows Vista 和 Windows 7。

于 2010-07-29T15:09:54.810 回答
-4

有没有办法让它以管理员身份运行,而不必在 UAC 框上单击“是”?

如果这是可能的,那将完全违背 UAC 的观点。

因此,看来您唯一真正的解决方案是在盒子上禁用 UAC。

于 2010-02-11T22:06:52.810 回答