3

我正在专门为 Office 365 编写一个 PowerShell 应用程序,但遇到了一个问题。

var result = pipeline.Invoke();
// close the runspace
runspace.Close();

// convert the script result into a single string

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("<----------------Results---------------->");
foreach (var item in result)
{
    stringBuilder.AppendLine(item.ToString());
}

现在,一切都很好,直到我得到我的结果。问题是,如果我得到这样的回应:

UserPrincipalName          DisplayName                isLicensed                
-----------------          -----------                ----------                
johnsonadmin@johnsoncom... Jack M*****                False  

如果我在 Powershell 中运行相同的命令,我会得到相同的结果,但格式会更有条理。而不是说“johnsonadmin@johnsoncom...”,它实际上会给我整个电子邮件地址。

我认为这可能是集合如何自动格式化我的字符串的问题,但我不确定。当我尝试解析电子邮件地址的文本时,这成为一个大问题;)

任何帮助,将不胜感激!!

谢谢!

4

3 回答 3

5

如果您尝试将管道的结果解析为字符串,那么您完全错过了powershell的存在理由:您不必解析字符串。1970 年 1 月 1 日就是这样。如今,当您坐在现代 Windows 机器前时,awk、sed 和 grep 正在佛罗里达州的一家养老院中。如果您觉得自己在使用 Cygwin,那么您做错了。

我正在以你的脚本为起点做这件事,但你会明白的(我希望):

//...
// result is a Collection<PSObject>
foreach (PSObject item in result) 
{ 
     // properties are not case-sensitive
     string userPrincipalName = item.Properties["userprincipalname"].Value as string;
     string displayName = item.Properties["displayname"].Value as string;
     bool isLicensed = item.Properties["islicensed"].Value as bool;
     // ...
} 

格迪特?顺便说一句,您看到输出中的所有内容都被切断的原因是您正在捕获针对狭窄控制台窗口进行了优化的显示友好格式输出。

于 2011-12-29T03:48:10.333 回答
1

而不是item.ToString(),访问实际属性。

于 2011-12-29T00:31:50.193 回答
0

我感谢对整个属性部分的帮助 - 我不知道我能做到这一点。

然而,我最近的问题是对象引用问题。我最终通过使用这个线程解决了这个问题。

结合使用不同类型的 Powershell,这样我可以调用两次并通过 ISS 连接到 MSOnline 服务,我能够在不解析文本的情况下获取我的用户列表 :)

于 2011-12-30T17:57:56.327 回答