c# - 具有 System.Management.Automation 的 Select-Object 不返回选定的属性
问题描述
我正在使用 System.Management.Automation.dll 在 c# 中使用 Select-Object 获取邮箱,以仅返回我需要的字段。不幸的是,返回的结果是具有单个属性和空值的 PSObject 列表。属性未正确映射到返回的 PSObject。
运行空间管道设置:
var o365ConnectionUri = "https://outlook.office365.com/powershell-liveid/";
var exchangeModuleUri = "http://schemas.microsoft.com/powershell/Microsoft.Exchange";
var connectionInfo = new WSManConnectionInfo(new Uri(o365ConnectionUri), exchangeModuleUri, credentials)
{
AuthenticationMechanism = AuthenticationMechanism.Basic
};
var runspace = RunspaceFactory.CreateRunspace(connectionInfo);
runspace.Open();
var pipeline = runspace.CreatePipeline()
命令执行:
var getMailboxesCmd = new Command("Get-Mailbox");
getMailboxesCmd.Parameters.Add("ResultSize", "unlimited");
var fieldsToSelect = new[]
{
"RecipientTypeDetails",
"PrimarySmtpAddress",
"DisplayName"
};
var sparseMailboxesCmd = new Command("Select-Object");
sparseMailboxesCmd.Parameters.Add("Property", string.Join(",", fieldsToSelect));
pipeline.Commands.Add(getMailboxesCmd);
pipeline.Commands.Add(sparseMailboxesCmd );
var result = pipeline.Invoke();
现在我希望结果是 PSObjects 的列表,其属性为RecipientTypeDetails
、PrimarySmtpAddress
和DisplayName
。但是,正如我在上面提到的,返回一个名为RecipientTypeDetails,PrimarySmtpAddress,DisplayName
null 值的属性。
据我所知,这一定是 System.Management.Automation.dll 中的一个错误,是否有其他人处理过这个问题或找到了解决方法?
解决方案
与参数一起使用时,该Select-Object
命令Property
将单个属性名称作为字符串或将属性名称的字符串数组作为参数。
在您的情况下,您通过执行将三个属性连接成一个字符串string.Join(",", fieldsToSelect)
。这归结为要求Select-Object
找到一个名为“RecipientTypeDetails,PrimarySmtpAddress,DisplayName”的属性,当然该属性不存在(返回null
)。
要解决此问题,只需将属性名称数组添加到命令中:
var sparseMailboxesCmd = new Command("Select-Object");
sparseMailboxesCmd.Parameters.Add("Property", fieldsToSelect);
至于您的最新评论:
Select-Object
将返回 PSObject(s),其中每个对象都包含您添加到命令中的属性。
要从这些 PSObject 中获取(扩展)实际值,您使用的解决方案.ToString
将起作用,因为在这种情况下,属性都是字符串类型。虽然我不是很喜欢 C#,但我认为这也可以从 PSObjects 中获取属性值:
object.Properties["RecipientTypeDetails"].Value
object.Properties["PrimarySmtpAddress"].Value
object.Properties["DisplayName"].Value
推荐阅读
- http - 从支付网关返回的 HTTP 错误 414
- python - 根据数据范围优化x轴-水平条之间的plt.yticks`
- dataframe - 如何在pyspark数据框中进行分组而不聚合
- cross-browser - 在 Set-Cookie 标头中可以有一个尾随分号吗?
- c# - dotnet new 找不到路径的一部分
- eloquent - 分离单个 belongsToMany 关系
- python - 如何使用 python 以不同的行将文本从一个文件插入另一个文件?
- powerbi - 如何将 Tableau FIXED LOD 转换为 Power BI?
- php - Laravel 二维码在发送电子邮件时不起作用
- git - git子模块跟踪标签