为什么我的收藏中的字符串会切断单词?

Jac*_*k M 3 c# collections powershell stringbuilder ellipsis

我正在编写专门用于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());
}
Run Code Online (Sandbox Code Playgroud)

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

UserPrincipalName          DisplayName                isLicensed                
-----------------          -----------                ----------                
johnsonadmin@johnsoncom... Jack M*****                False  
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢!

x0n*_*x0n 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;
     // ...
} 
Run Code Online (Sandbox Code Playgroud)

Geddit?顺便说一句,你看到输出中切断的一切是因为你正在捕获显示友好的格式化输出,这是针对狭窄的控制台窗口进行优化的.