我想通过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;
答案 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"。使用风险自负