使用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
不行:通过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
更新
当我尝试从浏览器中打开Url时,我按预期获得401 - Unauthorized
。
但是,仍然可以通过我在这里发布的C#代码
更新2
我注意到WSManConnectionInfo
使用了一些Kerberos身份验证(在这种情况下)并成功登录。
任何人都可以解释一下CommandLine和WSManConnectionInfo之间的区别是什么?为什么我使用one而不是使用另一个来成功验证?
提前谢谢
答案 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,但通常都可以连接到它