使用WSManConnectionInfo或命令窗口的远程Exchange Powershell(安全性)

时间:2015-10-20 13:38:13

标签: c# security powershell

使用Powershell Runspace和WSManConnectionInfo在C#中进行开发时,我在powershell命令窗口中测试相同的连接(使用相同的域用户)时发现了一些奇怪的行为。

确定:使用命令窗口远程Powershell(未经许可的用户)(按预期失败)

# Connecting to a Remote powershell using non authorized domain user.

New-PSSession -ComputerName MY-EXCH-SERVER -Credential $null
New-PSSession : [MY-EXCH-SERVER] Connecting to remote server MY-EXCH-SERVER failed with the following error message :
Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.
At line:1 char:1

From Console - Powershell command

不行:通过VS2015的WSManConnectionInfo与之前用户相同的远程Powershell连接(成功,但它不应该因为它是同一个用户)

// When I do the below with the SAME user I am using in Powershell cmd window
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(
    new Uri("http://MY-EXCH-SERVER/PowerShell/"),
    "http://schemas.microsoft.com/powershell/Microsoft.Exchange",
    PSCredential.Empty
);
connectionInfo.SkipCACheck = true; // can be ignored
connectionInfo.SkipCNCheck = true; // can also be ignored
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default;
this.currentRunspace =  RunspaceFactory.CreateRunspace(connectionInfo);
this.currentRunspace.Open();
[...]
// The connection is established, but the user does not have access actually

From Visual Studio using WSManConnectionInfo

更新 当我尝试从浏览器中打开Url时,我按预期获得401 - Unauthorized。 但是,仍然可以通过我在这里发布的C#代码

更新2 我注意到WSManConnectionInfo使用了一些Kerberos身份验证(在这种情况下)并成功登录。

任何人都可以解释一下CommandLine和WSManConnectionInfo之间的区别是什么?为什么我使用one而不是使用另一个来成功验证?

提前谢谢

1 个答案:

答案 0 :(得分:1)

New-PSSession -ComputerName MY-EXCH-SERVER -Credential $null无法与Visual Studio中的WSManConnectionInfo进行比较。

New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://MY-EXCH-SERVER/PowerShell/确实如此。

我还注意到几乎每个用户(在域内)都可以使用我提到的命令访问Exchange Powershell - 但是他们访问受限(例如他们无法运行“Get-TransportAgent”)。

换句话说,域用户可以根据其Active Directory权限访问交换shell cmdlet,但通常都可以连接到它