在Visual Studio中以调试模式运行时,为本地交换服务器启用邮箱的代码工作,但在同一实例上的IIS上部署时失败。这些命令也可以在Powershell控制台中运行 它抛出异常无法连接到服务器访问被拒绝。
有人可以帮助我吗?
PFB从Visual Studio调试模式运行时完全正常运行的代码段,从IIS上部署的代码运行时运行失败
string connectionUri = strConURI;
string loginPassword = Pwd;
SecureString secpassword = new SecureString();
foreach (char c in loginPassword)
{
secpassword.AppendChar(c);
}
PSCredential credential = new PSCredential(Usercred, secpassword);
Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace();
PowerShell powershell = PowerShell.Create();
PSCommand command = new PSCommand();
command.AddCommand("New-PSSession");
command.AddParameter("ConfigurationName", "Microsoft.Exchange");
command.AddParameter("ConnectionUri", new Uri(connectionUri));
command.AddParameter("Credential", credential);
command.AddParameter("Authentication", "Basic");
// command.AddCommand("Set-ExecutionPolicy RemoteSigned");
powershell.Commands = command;
runspace.Open();
powershell.Runspace = runspace;
Collection<System.Management.Automation.PSObject>
result = powershell.Invoke();
if (powershell.Streams.Error.Count > 0 || result.Count != 1)
{
throw new Exception("failed");
}
powershell = PowerShell.Create();
command = new PSCommand();
command.AddCommand("Invoke-Command");
const String ScriptBlock = "Get-User {0} | Enable-RemoteMailbox -RemoteRoutingAddress {1};";
String ScriptBlockstr = string.Format(ScriptBlock, GetUser, MailboxUser);
command.AddParameter("ScriptBlock", System.Management.Automation.ScriptBlock.Create(ScriptBlockstr));
command.AddParameter("Session", result[0]);
powershell.Commands = command;
powershell.Runspace = runspace;
var mailBoxes = powershell.Invoke();
答案 0 :(得分:1)
由于我们不知道如何配置MS Exchange服务器以及如何触发应用程序,因此不容易对其进行故障排除。
首先请注意,根据您的配置,您可以使用端口5985(http WinRM),5986(https WinRM)或443或80(如Microsoft here所述)或您可能拥有的任何端口配置。当您使用New-PsSession时,使用ComputerName 5985/5986。如果您使用ConnectionURI,则使用端口80或443(有关更多信息,请参阅here)。
在您的脑海中,现在要检查一些基本的故障排除步骤:
winrm quickconfig -transport:https
因为如果使用WinRM并且HTTPS不是传输,则必须在可信主机列表中配置目标远程计算机(有关更多信息,请参见下文和here)。
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<FQDN of Exchange Mailbox server>/PowerShell/ -Authentication Negotiate -Credential $UserCredential -SkipCACheck -SkipCNCheck -SkipRevocationCheck
Import-PSSession $Session
或者,如果您知道应该使用哪种身份验证,请使用:
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<FQDN of Exchange Mailbox server>/PowerShell/ -Authentication Kerberos -Credential $UserCredential -SkipCACheck -SkipCNCheck -SkipRevocationCheck
Import-PSSession $Session
或
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://<FQDN of Exchange Mailbox server>/PowerShell/ -Authentication Basic -Credential $UserCredential -SkipCACheck -SkipCNCheck -SkipRevocationCheck
Import-PSSession $Session
Set-User YourTaskUser -RemotePowerShellEnabled $True
Get-PowerShellVirtualDirectory "Exchange2010\PowerShell (Default Web Site)"
在大多数情况下,您将能够使用其他域中的远程计算机。但是,如果远程计算机不在受信任的域中,则远程计算机可能无法验证您的凭据。要启用身份验证,您需要将远程计算机添加到WinRM中本地计算机的可信主机列表中(请参阅here)。为此,请键入:
winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'
检查身份验证(= Basic)是否已更改或者AllowUnencrypted是否设置为true。两者都不是默认设置,如果完成可能会导致意外问题(除了限制安全性的事实)。
您还可以使用Test-WSMan检查基本和/或kerberos身份验证是否按预期工作(通过http或https以及您配置/使用的WinRM端口)。以下是一些例子:
Test-WSMan -ComputerName https://server2008:5986 -Auth basic -Cred B\MY_USER_NAME
和/或
Test-WSMan -ComputerName https://server2008:5986 -Auth kerberos