programing

타원이 없는 출력으로 파워셸 스크립트 변경(...)

abcjava 2023. 9. 13. 22:17
반응형

타원이 없는 출력으로 파워셸 스크립트 변경(...)

다음 스크립트의 출력에 대한 도움이 필요합니다. 결과가 타원(...)과 함께 나타나지 않도록 말입니다.삽입하려고 했습니다.| 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                                          

둘 중 하나(fl) 또는 (ft -auto도움이 될 것입니다

$services | fl

오어

$services | ft -auto

저는 이 게시물을 우연히 발견했고 몇 가지 정보를 추가하고 싶습니다. 수락된 해결책은 제 문제를 해결하지 못했고 다른 사람들은 다음 정보가 유용하다고 생각할 수 있기 때문입니다.

빠른 이야기: 다음을 사용하여 명령 실행Microsoft Online Services Module와 함께Powershell, 대부분의 결과가 데이터 컷오프와 함께 잘린 것으로 계속 검색되고 생략된 것이 타원(...)으로 검색되었습니다.

해결책: Greig이 올린에서 설명한 것처럼, 저는 어쩔 수 없이 결론에 이르렀습니다.$FormatEnumerationLimit=-1문제에 대한 무한한 해결책입니다.모든 변형 모델을 사용하여Format-Wide,Format-List,Format-Table,Format-Custom,-AutoSize,Out-String -Width, 등은 상당한 양의 추가 고려 사항/코드를 필요로 합니다.열, 배열 등에 관계없이 모든 데이터가 반환되는 것만 보고 싶을 경우,$FormatEnumerationLimit=-1모든 것을 얻을 수 있고 빈둥거릴 필요가 없습니다.

Greig의 게시물에 기록된 추가 정보는 다음과 같습니다.

PowerShell 빠른 팁: PowerShell로 넓은 테이블 만들기 저자의 설명:

항목 모음을 포함하는 특정 속성이 있는 경우 해당 컬렉션의 항목 수가 내장된 $FormatEnumerationLimit 변수에 할당된 수를 초과해도 해당 속성은 여기서 생성된 파일에서 생략을 표시할 수 있습니다.

...그리고 그것은 "결과를 다음과 같이 보여줍니다.| Format-Table -Property *[will] 모든 열을 보여줍니다."그러나 열의 내용은 여전히 잘릴 수 있습니다("PowerShell이 기본적으로 테이블 출력을 잘립니다").| Format-Table -Property * -AutoSize화면 버퍼에 의해 제한됩니다("자동 크기 테이블은 화면 버퍼 폭으로 제한됨").$FormatEnumerationLimit=-1이 되기 전에 제공된 솔루션은 다음을 사용하고 있는 것으로 보입니다.| Format-Table -Property * -AutoSize와 공동으로| Out-String -Width 4096필요한 폭이 무엇이든 간에.

Format 명령을 사용하여 출력 보기를 변경하면 다음에 대한 자세한 문서가 제공됩니다.Format cmdlets:Format-Wide,Format-List,그리고.Format-Table.

이 상황에서는 포맷 설명을 작성한 다음 이를 내 Format-Table 명령에 대한 인수로 사용합니다.데이터 필드를 가장 긴 데이터로 조사하고(형식 설명의 끝에 이것이 있으면 도움이 됩니다), 그것이 반환하는 값으로 형식 설명의 너비를 설정하는 기능(Get-MaxLength)을 개발했습니다.아래 코드에서 계산을 확인하실 수 있습니다.Intel(4) Management Engine Interface의 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

언급URL : https://stackoverflow.com/questions/13735275/change-powershell-script-to-output-without-ellipses

반응형