Exchange 2010 + Powershell和C#问题从当前用户获得PSCredential

时间:2011-02-10 10:07:55

标签: c# powershell credentials

我想通过C#使用powershell执行Exchange 2010操作。我可以建立连接,如下所示。我的问题:如何在不明确指定凭据的情况下创建连接?我不能通过当前的Windows用户身份获得它吗?

SecureString password = new SecureString();
string str_password = "pass";
string username = "userr";
string liveIdconnectionUri = "http://exchange.cccc.com  /Powershell?serializationLevel=Full";

foreach (char x in str_password)
{
password.AppendChar(x);
}

PSCredential credential = new PSCredential(username, password);

// Set the connection Info
WSManConnectionInfo connectionInfo = new WSManConnectionInfo((new Uri(liveIdconnectionUri)), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential);

connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default;

2 个答案:

答案 0 :(得分:3)

试试[System.Net.NetworkCredential]::DefaultCredentials。来自文档:

  

DefaultCredentials代表   当前的系统凭据   安全上下文中的   应用程序正在运行为一个   客户端应用程序,这些是   通常是Windows凭据(用户   名称,密码和域名   用户运行应用程序。

PoshCode.org script中的这个函数显示了如何从净信用转换为ps信用:

Function ConvertTo-PSCredential {
#.Synopsis
#   Helper function which converts a NetworkCredential to a PSCredential
Param([System.Net.NetworkCredential]$Credential)
   New-Object System.Management.Automation.PSCredential `
              "$($Credential.UserName)@$($Credential.Domain)", `
              (ConvertTo-SecureString $Credential.Password -AsPlainText -Force)
}

请注意,原始的PoshCode函数中包含一些无关的,未使用的脚本。

答案 1 :(得分:2)

我不知道从安全令牌创建PSCredential对象的方法。我认为一般工作流程是在这些情况下提示用户提供凭据,以避免与安全性提升相关的漏洞。

您应该使用PSHostUserInterface.PromptForCredentials方法提示用户提供凭据。

还有一些缓存凭据的示例:"PowerShell Script: Export-PSCredential and Import-PSCredential"。使用风险自负