2017-10-09 81 views
1

我有這個功能,創建分發交流羣(此功能效果很好):拒絕訪問交流外殼時,我模仿

private void createDistributionGroup() 
{ 
     System.Security.SecureString pass = new System.Security.SecureString(); 
     foreach (char c in password) 
      pass.AppendChar(c); 
     PSCredential cred = new PSCredential(username, pass); 

     WSManConnectionInfo connection = new WSManConnectionInfo(new Uri("http://[my_exchange].[my_domain].com/PowerShell/"), "Microsoft.Exchange", cred); 
     connection.AuthenticationMechanism = AuthenticationMechanism.Default; 

     Runspace runspace = RunspaceFactory.CreateRunspace(connection); 
     PowerShell ps = PowerShell.Create(); 

     try 
     { 
      runspace.Open(); 
      ps.Runspace = runspace; 
      ps.AddCommand("New-DistributionGroup").AddParameter("Name", "GRP_DIF_" + textBox1.Text)); 
      ps.Invoke(); 
     } 
     finally 
     { 
      runspace.Dispose(); 
      runspace = null; 
      ps.Dispose(); 
      ps = null; 
     } 
    } 

我有使用模擬我的應用程序來執行,使用the msdn example我冒充的服務帳戶(MSDN示例運行良好,冒充成功)。

之前實施模擬的連接工作,因爲我做的模擬,當我嘗試執行createDistributionGroup()功能我得到一個錯誤:

Access Denied : About remote troubleshooting

我已立即進行測試使用

本地PowerShell來打開遠程PowerShell會話
$credential = Get-Credential 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://[my_exchange].[my_domain].com/PowerShell/ -Authentication Default -Credential $credential 
Import-PSSession $Session 

和會話被成功打開...

  • 我已經測試過更改服務帳戶權限(甚至域管理員他被拒絕...):沒有效果
  • 我給交換服務器(本地管理員組,...)上的特殊訪問權限:無效
  • 我給特價IIS權限(前端,後端,...):無效

爲什麼當我模擬賬戶被拒絕以及如何授予訪問權限?

回答

1

模擬不適用於遠程認證。那時,本地進程無法向遠程進程證明它確實是原始客戶端(這很好,因爲它不是)。

當您使用Get-Credential中提供的憑證進行連接時,實際密碼已存在且可用,因此身份驗證正常運行。

所以,這實質上是一個kerberos雙跳問題,而不是人們通常遇到的問題。

如果您必須使用模擬,那麼您將需要某種方式在遠程計算機上重新進行身份驗證。

一種可能的方式,不一定是個好主意,就是將憑據存儲在加密文件中,該文件必須由您正在模擬的帳戶訪問。實際上,我不是100%肯定這將與模擬工作,但它可能是值得一試:

首先,存儲加密的憑據(運行此作爲用戶被冒充):

$cred = Get-Credential 
$cred | Export-Clixml -Path "C:\Creds\appcred_${env:USERNAME}_${env:COMPUTERNAME}.xml" 

在您的應用程序代碼,在模擬後:

$cred = Import-Clixml -Path "C:\Creds\appcred_${env:USERNAME}_${env:COMPUTERNAME}.xml" 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://[my_exchange].[my_domain].com/PowerShell/ -Authentication Default -Credential $cred 

此序列一般工作。 XML中的憑證密碼使用Windows數據保護API(DPAPI)加密,密鑰與用戶和計算機相關,因此只能由同一用戶在同一臺​​計算機上解密。

正如我所說我不知道​​這是否會與模擬或不工作。

這也意味着如果您在AD中更改帳戶的密碼,則需要手動更新文件。

+0

Finaly我不模仿這個功能,最簡單的方法就是在模擬之後調用這個函數。感謝您的解釋! –