2010-02-11 297 views
10

好的这里是我的问题:以PowerShell脚本中的管理员身份运行命令。 UAC

我想在服务器上远程运行脚本。

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

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框中单击“是”?

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

任何帮助将不胜感激。

+0

好吧,这不是UAC。我禁用了UAC,防火墙以及其他所有我认为会干扰的事情。我也做了由tyranid建议的注册表更改。既不可行。这很古怪。它表示操作成功,然后提供相同的访问权限被拒绝错误。 – Tim 2010-02-12 00:40:23

+0

你可以在远程PowerShell实例上运行'whoami/all'并查看你实际拥有的权限吗? – tyranid 2010-02-12 06:08:10

+0

我运行了这个命令,它列出了我的域帐户名,我在域中的成员组以及特权列表。所有权限均为管理员级别并且已启用,列出的其中一个组位于Administrators组中,并且所有权限都是正确的。 – Tim 2010-02-12 15:22:22

回答

10

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

我将-Credentials开关添加到invoke命令中,现在一切正常。下面更正代码示例:在HKLM \ SOFTWARE \微软\窗户发现

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

因此,当编写需要管理员权限的东西时,没有比在脚本中以明文形式输入用户名和密码更好的方法吗?真?以管理员身份运行该服务是不够的... 编写需要管理员权限的Windows服务安装的最佳做法是什么? – 2013-12-20 09:26:39

+1

另一种方法是让用户通过Get-Credential cmdlet输入凭据。 – riezebosch 2015-03-13 09:27:42

-3

是否有无论如何得到这个以管理员身份运行,而不必点击UAC盒上的是?

如果这是可能的话,它将完全击败UAC的观点。

因此,看起来您唯一真正的解决方案就是禁用UAC。

+0

不幸的是,禁用UAC不是一种选择,因为它将在高可视性服务器上运行。 希望有人可以找出解决方案或解决方法。也许我只是在做错事。 – Tim 2010-02-11 22:12:30

+0

另一种方法是将这些脚本运行的任何启动都提升 - 然后它可以产生其他升级的进程而不需要另一个UAC确认。 – 2010-02-11 22:14:16

+0

我唯一的问题是它会远程执行。 此脚本将从管理服务器在多个服务器上运行不同的命令。因此,服务器A(mgmt)在服务器1,2和3上远程运行命令。如果服务器A上的进程正在运行,它将在服务器1,2和3上运行提升? – Tim 2010-02-11 22:21:02

0

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

-3

设置选项 “EnableLUA”(DWORD值)\ CurrentVersion \政策\系统为0并重新启动。

这将禁用UAC没有问题,我会为你的所有用户做到这一点,无论是否有权限取决于你,因为Vista的UAC是如此的可怕,以至于我相信少有人拥有它更好(至少在Vista中)他们是。这个技巧也适用于Win7。

有乐趣我的注册表招:)

PS:事实证明也是如此审查意见,说明如何尽可能禁用UAC与上面的回答我的职务/线程而言(勤奋的答案是去除)。

+2

我不认为他们会用你的意思来审查你。我最好的猜测是你推荐的东西可能会给偶然用户带来安全风险。 UAC是否由于某种原因,这是否成功实现是超出了这个问题的范围;) – Kounavi 2012-05-23 17:40:11

+0

@Kounavi好的,你是对的,它超出了这个问题的范围,这就是为什么我回答了这个问题,并包括我的其他评论作为一个附带评论。如果以这样一种可怕的方式完成某些事情,就应该向开发者传授一种教训,并且更重要的是,因为这样做带来的灾难远远超过了它提供的安全性,所以应该提出抗议和禁止,这是Vista的主要原因之一是一场巨大的灾难。 – 2012-05-25 09:23:45

相关问题