2010-02-11 265 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

相關問題