【问题标题】:Output two times in same line在同一行输出两次
【发布时间】:2013-12-23 17:11:43
【问题描述】:

我试图在同一行而不是新行上输出两件事,但我不确定如何执行此操作,或者是否可能。

"Tag # Entered"; "-------------"; echo $tag1;

$OSInfo | Format-Table -Property @{Name="Resolved Tag #";Expression={$_.CSName}} -AutoSize;

我试图让它看起来像下面

Tag # Entered        Resolved Tag #
-------------        --------------
c63001               C63001

.

.

.

编辑以获得更多帮助:

$OSInfo `
    | Format-Table -Property `
        @{ Name = "Tag # Entered"; Expression = { $tag1 }; Width = 10 }, `
        @{ Name = "Resolved Tag #"; Expression = { $_.CSName } };

.

.

还试图将这两个东西放在同一行,但它不起作用:

$domain = Get-WmiObject win32_computersystem -Computer $tag1 | Format-Table -Property @{Name="Username";Expression={$_.username}} -Autosize;
$username = (Get-WmiObject win32_computersystem -Computer $tag1).UserName.Split("\")[1];
$longname = ((net user $username /domain | Select-String "Full Name") -replace "Full Name","").Trim();

我试图这样做:

$Test `
    | Format-Table -AutoSize -Property `
        @{ Name = "Tag # Entered";  Expression = { $domain } }, `
        @{ Name = "Resolved Tag #"; Expression = { $longname } };

【问题讨论】:

  • 您将不得不发布您的第一次编辑的输出以及它的不正确之处,因为当我尝试相同的东西时它工作正常。您对$username 的分配看起来是正确的,尽管我现在不在域计算机上测试net user 命令。不过,您对Format-Table 的调用看起来是正确的。我假设您已在代码的其他位置为 $domain 设置了一个值。
  • 糟糕,对不起!在那里使用了错误的代码行。我编辑了 OP。我不确定为什么它不能按照我想要的输出方式工作......我可以使用 $Test 作为变量吗?我的意思是......如果我只是“echo $domain”和“echo $longname”......他们输出很好......但在不同的行。我把它们放在上面发布的方式是因为我希望它们在同一行。
  • 只是把这个想法扔在那里,如果你只是在同一行打印多个变量但不一定以表格格式打印,你可以使用 Write-Host-NoNewLine 参数和自己处理所有对齐。示例:Write-Host -NoNewline "Tag # Entered: $tag1; "; Write-Host "Resolved Tag #: $($OSInfo.CSName)"; 当然,对于那个示例,您可以将两个命令组合成一个对 Write-Host 的调用,同时省略 -NoNewline 参数,但希望您明白这一点。
  • 你拥有它的方式似乎不起作用......我正在尝试弄清楚如何编写它,但只是让你知道。我要做的就是将两个输出放在同一行。

标签: powershell output


【解决方案1】:

这应该会为您提供所需的输出(重新格式化的空格以提高可读性):

$OSInfo `
    | Format-Table -AutoSize -Property `
        @{ Name = "Tag # Entered";  Expression = { $tag1 } }, `
        @{ Name = "Resolved Tag #"; Expression = { $_.CSName } };

请注意,如果$OSInfo 包含多个项目,则第一列的值对于所有项目都是相同的 ("c63001")。

【讨论】:

  • 有效!有没有办法在它们之间增加更多的空间,还是不可能?
  • 记住输出由对象组成。当你有对象时,PowerShell 输出对象的实际外观并不重要(数据都在那里;间距真的不重要)。
  • @Aaron 您可以在定义每一列的Hashtable 中添加Width 项目(例如@{ Name = "Tag # Entered"; Expression = { $tag1 }; Width = 10 })。见Format-Table-Property参数。
  • 嗯,我试过了,但它没有做任何事情,但也没有得到任何错误。
  • @Aaron 确保删除 -AutoSize 参数,因为这可能会覆盖 Width 值。
【解决方案2】:

这就是我想要的:

$CompInfo `
    | Format-Table -AutoSize -Property `
        @{ Name = "Domain\user";  Expression = { $CompInfo.username } }, `
        @{ Name = "Full Name"; Expression = { $fullname } };

它不起作用的原因是因为我使用的是 $OSInfo,它是 win32_operatingsystem 类。

$OSInfo = get-wmiobject -class win32_operatingsystem -computername $tag1;
$CompInfo = get-wmiobject -class win32_computersystem -Computer $tag1;

我试图输出的域是使用 win32_computersystem 类提取的,我试图在 win32_operatingsystem 下进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    相关资源
    最近更新 更多