【问题标题】:Why do the strings in my collection cut off words?为什么我的收藏中的字符串会截断单词?
【发布时间】:2012-01-29 13:40:53
【问题描述】:

我正在专门为 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...”,它实际上会给我整个电子邮件地址。

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

任何帮助将不胜感激!

谢谢!

【问题讨论】:

  • 涉及的对象有哪些类型? PowerShell 通过表示做了一些常规的事情,但您只是调用 ToString(),回退到该特定对象的 C# ToString 实现。这可能是问题所在。 (另请查看另一条评论中发布的链接)。

标签: c# powershell collections stringbuilder ellipsis


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果您尝试将管道的结果解析为字符串,那么您完全错过了 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;
         // ...
    } 
    

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

    【讨论】:

    • 我真的刚开始在 C# 中做 Powershell 的东西,所以我不知道我可以从 PSObject 中获取属性信息。太酷了!但是,我现在有一个未设置为对象实例的对象引用...我已经通过 Google 确保 userprincipalname 是正确的属性。除了继续研究(我会做)之外,不知道从这里去哪里。顺便说一句,谢谢你的帮助!我已经断断续续地退出编程领域有一段时间了,我的知识相当有限。
    【解决方案3】:

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

    【讨论】:

    • 这就是我的对象引用错误:string userprincipalname = item.Properties["UserPrincipalName"].Value as string(); 我不知道这是否重要,但我将整个内容作为“AddScript”而不是“AddCommand” .无论如何,如果我执行 item.ToString(),我会得到我从原始问题中得到的结果。
    猜你喜欢
    • 2021-08-19
    • 2015-12-20
    • 2019-10-17
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2021-10-28
    相关资源
    最近更新 更多