将powershell脚本更改为不带省略号的输出(...)

时间:2012-12-06 00:57:39

标签: powershell powershell-v2.0

我需要一些关于以下脚本输出的帮助,因此输出不会显示省略号(...)。 我试图插入“| Format-Table -Wrap -AutoSize” 但我似乎没有把它弄好。

 clear-host Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue    
 $services = new-object system.collections.sortedlist
 $servers = (get-spfarm).servers  
 foreach ($server in $servers) {
     foreach($service in $server.serviceinstances)
     {
         if ($service.status = "Online")
         {
             $s = $service.typename
             if ($services.contains($s))
             {
                 $serverlist = $services[$s]
                 $servername = $server.name 
                 $services[$s]  = "$serverlist - $servername"
             }
             else
             {
                 $services[$s] = $server.name
             }
         }
     } } 
  $services

输出:

Name                            Value                                                                           
----                           -----                                                                           
Access Database Service        SE5APP - SE5FE - SE7FE - FAQ3                                          
Application Discovery **and L...** SE5APP - SE5FE - SE7FE - FAQ3                                          
Application Registry Service   SE5APP - SE5FE - SE7FE - FAQ3                                          

感谢您的阅读。

3 个答案:

答案 0 :(得分:17)

Format-Listfl)或Format-Table -autoft -auto)应该可以提供帮助。

$services | fl

OR

$services | ft -auto

答案 1 :(得分:17)

我遇到过这篇文章并希望添加一些信息,因为已接受的解决方案无法解决我的问题,我相信其他人可能会发现以下信息有用:

快速故事:使用带有Microsoft Online Services Module的{​​{1}}运行命令,大部分结果都会被截断,数据截断并作为省略号丢失(... )。

修复:正如this post by Greig中所述,我不可避免地得出结论Powershell是解决问题的不可思议的解决方案。使用$FormatEnumerationLimit=-1Format-WideFormat-ListFormat-TableFormat-Custom-AutoSize等的任何变体都需要大量的额外注意事项/码。如果你想要的只是看所有所返回的数据,无论列,数组等如何,Out-String -Width都可以确保你获得所有和你不需要乱七八糟。

其他信息,在Greig的帖子中包含:

PowerShell Quick Tip: Creating wide tables with PowerShell,作者解释说:

  

如果您有包含项目集合的特定属性,   如果,该属性仍然可以在此处生成的文件中显示省略号   该集合中的项目数超过了分配的数量   内置的 $ FormatEnumerationLimit 变量。

...并且"将结果传递给$FormatEnumerationLimit=-1 [将]显示所有列。"但是列中的内容可能仍会被截断(" PowerShell默认情况下截断表输出"),即使使用| Format-Table -Property *也会受到屏幕缓冲区的限制 ("自动调整大小的表格仅限于屏幕缓冲区的宽度")。在绝对 $ FormatEnumerationLimit = -1 之前提供的解决方案似乎正在使用| Format-Table -Property * -AutoSize| Format-Table -Property * -AutoSize或您需要的任何宽度。

Using Format Commands to Change Output View| Out-String -Width 4096Format cmdletsFormat-WideFormat-List上提供了一些更详细的文档。

答案 2 :(得分:0)

在这种情况下,我要做的是创建格式描述,然后将其用作我的Format-Table命令的参数。我开发了一个函数(Get-MaxLength)来检查数据最长的数据字段(有助于在格式描述的末尾添加该字段),并使用返回的值在格式描述中设置宽度。您可以在下面的代码中查看计算。请注意Intel(4)管理引擎接口的Number值。还要注意在Format-Table命令上使用-Wrap。可以修改此概念以计算所有字段的宽度,也可以仅计算最后一个字段的宽度,这只是一点数学运算。

Function Get-MaxLength {

<#
.SYNOPSIS
   Finds the length of the longest item in collection.

.DESCRIPTION
   Use this Function to get the length of the longest item in a
   collection for use in format strings or other places where
   needed.

.PARAMETER TestObj
    The qualified object to be tested. See example!

.Parameter MinLen
    The minimum length of the item (if using for formatting) which
    should be the Label (title) length. Note if the object item
    being tested does not have a Length property you MUST specify
    the label length!

.OUTPUTS
    Returns a numerical value

.EXAMPLE
   $NameLen = Get-MaxLength -TestObj $DotNet.PSChildName
   $VerLen  = Get-MaxLength -TestObj $DotNet.Version
   $RNLen   = Get-MaxLength -TestObj $DotNet.Release -MinLen 11

     #--- .Net Information ---

 $fmtDotNet =
  @{Expression={$_.PSChildName};Label=".Net Type";Width=$NameLen},
  @{Expression={$_.Version};Label="Version No:";Width=$VerLen},
  @{Expression={$_.Release};Label="Release No:";Width=$RNLen}

  $Dotnet | Format-Table $fmtDotNet
#>

  Param(
    [Parameter(Mandatory=$True)]
     [object] $TestObj,
    [Parameter(Mandatory=$False)]
     [int] $MinLen = 0,
    [Parameter(Mandatory=$False)]
     [int] $MaxLen = 0
  )

   $ErrorActionPreference = "SilentlyContinue"

   foreach ($x in $TestObj) {
     If ($x.Trim().length -gt $MinLen) {
       $MinLen = $x.Trim().length
     }
   }

   If ($MaxLen -ne 0) {
     If ($MinLen -gt $MaxLen) {
       $MinLen = $MaxLen
     }
   }

   $ErrorActionPreference = "Continue"

   Return ,$MinLen

} #End Function -----------  Get-MaxLength  -------------------

  $OstrWidth = 80
  
  $DriverInfo =
  Get-CimInstance -ClassName 'Win32_PNPSignedDriver'         |
  Where-Object -Property DriverProviderName  -ne "Microsoft" |
  Where-Object -Property DeviceName -ne -Value $Null         |
  Sort-Object  -Property DeviceName -Unique

$DriverCnt = $DriverInfo.Count

  $DVLen =
    Get-MaxLength -TestObj $DriverInfo.DriverVersion -MinLen 14
  $DDLen = $OstrWidth - $DVLen

  $fmtDRVR = @{Label="`nDriver Description";Width=$DDLen;
                                 Expression={$_.DeviceName}},
             @{Label="Version Number";    Width=$DVLen;
                                 Expression={$_.DriverVersion}}

  $DrvTitle = "$($DriverCnt) Non-Windows Unique Drivers and " +
              "Version Numbers:" | Out-String

  $DriverInfo =
    $DriverInfo | Format-Table -Property $fmtDRVR -Wrap |
                  Out-String   -Width $OStrWidth

样本输出:

Driver Description                                                 Number
-------------------                                                -------------
Alcor Micro USB 2.0 Card Reader                                    2.0.150.10135
ASMedia USB3.1 eXtensible Host Controller                          1.16.42.1
...
Intel(R) HD Graphics 630                                           21.20.16.4550
Intel(R) Management Engine Interface                               1914.12.0.125
                                                                   6
Intel(R) Ready Mode Technology Device                              1.2.0.0
...
Realtek Audio                                                      6.0.1.8248
Samsung NVMe Controller                                            3.0.0.1802