2015-07-20 39 views
1

嘗試使用Set-ItemProperty設置使用備用管理員憑證的HKLM註冊表,但出現錯誤「提供程序不支持使用憑據」。同時將此腳本作爲標準最終用戶運行,而該用戶不具有我們要編輯的HKLM值的寫入權限。Powershell使用備用憑證編輯HKLM註冊表

$RegKey1 ='HKLM:\SOFTWARE\Microsoft\Office\Outlook\Addins\Workshare.Client.OutlookFormUI.AddinModule' 

$username = "LocalAdmin" 
$password = "Passw0rd" 
$AdminCred = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force)) 

Set-ItemProperty -Path $RegKey1 -Name "LoadBehavior" -Value 2 -Credential $AdminCred 
+1

使用具有備用憑據的'runas'或'start-process',然後在新進程中啓動您的腳本。 (還有IIRC的其他解決方案) – Vesper

+0

@Vesper我最終創建了一個在HKLM中具有所需註冊表更改的reg文件,並使用'start-process' reg.exe和'-credentials'來導入註冊表文件。感謝您帶領我朝着正確的方向前進。 – Jez

回答

1

解決方案是創建一個reg文件,其中包含所有需要的HKLM更改,並使用start-process和-credentials參數來執行reg.exe。

$username = "mydomain\localdmin" 
$password = "Passw0rd" 
$AdminCred = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force)) 
$regFile = "\\myServer\myShare\myRegFile.reg" 
$regArg1 = "import $regFile" 

Start-Process reg.exe -ArgumentList $regArg1 -Credential $AdminCred 
0

從獲取幫助的Set-ItemProperty -Detailed:

-Credential指定有權執行此操作的用戶帳戶。默認值是當前用戶。

輸入一個用戶名,例如「User01」或「Domain01 \ User01」,或輸入一個 PSCredential對象,例如由Get-Credentia l cmdlet生成的對象。如果您輸入用戶名,則系統會提示您輸入密碼。

安裝了 Windows PowerShell的任何提供程序都不支持此參數。

Get-PSProvider | FT -AutoSize

Name  Capabilities      Drives 
----  ------------      ------ 
Registry ShouldProcess, Transactions  {HKLM, HKCU} 
Alias  ShouldProcess      {Alias} 
Environment ShouldProcess      {Env} 
FileSystem Filter, ShouldProcess, Credentials {C, D, E} 
Function ShouldProcess      {Function} 
Variable ShouldProcess      {Variable} 
Certificate ShouldProcess      {Cert} 

(FileSystem提供具有自PS 3.0'憑證的能力)

因此,大家可以看到,註冊商不支持憑據。此參數僅適用於其他使用Set-ItemProperty通用命令的自定義提供程序,並可能爲自己的連接遠程計算機的方式添加「憑據」支持。

如果您想實現您的目標,請使用PS Remoting,WMI,遠程註冊表PowerShell模塊或Jerry Lai建議。