C#远程连接powershell获取Exchange服务器中通讯组及通讯组成员

本文详细介绍了如何通过C#调用System.Management.Automation.dll实现远程Powershell连接,并演示了具体的代码实现过程,包括服务器登录、Exchange PowerShell登录及执行命令等步骤。同时,文章列举了在实际操作中可能遇到的几个常见错误及其解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.引用 System.Management.Automation.dll
2.远程连接并打开服务器端 powershell

string admiName=@"服务器登录名称";
string adminPass="服务器密码";

//将string型密码转换为SecureString型
SecureString ssAdminPass=new SecureString();
foreach(var in adminPass)
{
	ssAdminPass.AppendChar(s);
}

//将用户名密码封装为PSCredential
//等同于脚本语言
//$cred=New-Object System.Management.Automation.PSCredential -ArgumentList $account,$secpwd
var credentials=new PSCredential(adminName,ssAdminPass);

//与服务器端建立连接
var connecInfo=new WSManConnectionInfo(false,"服务器IP""wsman","http://schemas.microsoft.com/powershell/Microsoft.PowerShell",credentials);
Runspace runspace=RunspaceFactory.CreateRunspace(connecInfo);
try{
	runspace.Open();

	//编写脚本语言
	using(var ps=PowerShell.Create()){
		ps.Runspace=runspace;
		//登录Exchange PowerShell
		ps.addScript("$account=\"用户名\"");
		ps.addScript("$secpwd=ConvertTo-SecureString '密码' -AsPlainText -Force");
		ps.addScript("$cred=New-Object System.Management.Automation.PSCredential -ArgumentList $account,$secpwd");
		ps.addScript("$session=New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://服务器名/powershell -Credential $cred");
		//-AllowClobber可将远程命令覆盖本地命令,若不加可能会出错
		ps.addScript("mport-PSSession $session -AllowClobber");
		ps.Invoke();

		//其他需要执行的命令 eg:Get-DistributionGroup
		ps.AddScript("Get-DistributionGroup");
		ps.Invoke();
	}
}

3.直接使用远程 powershell 执行所有脚本,出现以下几个错误,仅供参考

(1)远程连接时可能会出现
在这里插入图片描述

需:客户端和服务端将IP加入到winrm中TrustedHosts

(2)若 Import-PSSession 后没有 -AllowClobber 参数,可能出现
在这里插入图片描述
(3)在脚本语句中使用 foreach 遍历获取的变量会出现在这里插入图片描述脚本语句如下:

$dist=ForEach($group in (Get-DistributionGroup -ResultSize Unlimited))
{
	Get-DistributionGroupMember -Identity $group | Select @{.....}
}

将变量 $group 传送给 get-member 将会看到以下内容
在这里插入图片描述

$group 变量中还包含着 Identity 属性,若想获得预期的结果需要引用变量中属性

$dist=ForEach($group in (Get-DistributionGroup -ResultSize Unlimited))
{
	Get-DistributionGroupMember -Identity $group.Identity | Select @{.....}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值