在PowerShell脚本中以管理员身份运行Command.UAC

Tim*_*Tim 10 powershell uac appcmd invoke-command

好的,这是我的问题:

我试图在服务器上远程运行脚本.

我是两个盒子的管理员,防火墙例外已经到位,启用了远程管理,其他一切看起来都很好,我可以看到.

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

我一直收到以下错误

ERROR ( hresult:80070005, message:Failed to commit configuration changes. Access is denied.
Run Code Online (Sandbox Code Playgroud)

它试图运行的服务器是服务器2k8 R2盒子,我认为这个问题是UAC问题.无论如何要让它以管理员身份运行而不必在UAC盒子上单击是吗?

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

任何帮助将不胜感激.

Tim*_*Tim 10

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

我将-Credentials开关添加到了invoke命令,现在一切正常.更正了以下代码示例:

$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> 
} 
Run Code Online (Sandbox Code Playgroud)