PowerShell: 헤더가 없는 형식 테이블
에서 PowerShell에 가 몇 개 .Format-Table
CmdLet.
다음과 .
Something...
Operation AttributeName AttributeValue
--------- ------------- --------------
Delete Member John Doe
Something else...
필드의 의미는 매우 자명하기 때문에 형식 표의 출력에서 머리글, '--' 구분 기호 및 시작과 끝에 있는 빈 줄을 제거하고 싶습니다.
CmdLet이 이를 지원하지 않는다고 생각합니다(또는 적어도 이를 위한 매개 변수가 있다면 찾을 수 없었습니다).
Format-Table 출력의 실제 값을 가진 라인만 남기는 가장 좋은 방법은 무엇입니까?
사용해 보십시오.-HideTableHeaders
변수 to 한대 변수 개매 에▁to.Format-Table
:
gci | ft -HideTableHeaders
(PowerShell v2를 사용하고 있습니다.이것이 v1에 있었는지 모르겠습니다.)
ㅠㅠ-ExpandProperty
를 들어,를 를예어들다, 변를다로보데사내용니로 보낼 때 합니다.Out-Gridview -PassThru
그렇지 않으면 변수에 헤더 정보가 저장됩니다.둘 이상의 속성을 반환하려는 경우에는 이러한 속성이 적합하지 않습니다.
예:
Get-ADUser -filter * | select name -expandproperty name
또는 다음을 수행할 수 있습니다.
(Get-ADUser -filter * ).name
그-HideTableHeaders
안타깝게도 매개 변수는 여전히 빈 줄이 인쇄되도록 합니다(그리고 테이블 헤더는 여전히 열 너비에 대해 고려됩니다).여기서 안정적으로 작동할 수 있는 유일한 방법은 출력을 직접 포맷하는 것입니다.
| % { '{0,10} {1,20} {2,20}' -f $_.Operation,$_.AttributeName,$_.AttributeValue }
이것이 제가 해결하는 방법입니다.출력을 Out-String에 파이프로 연결한 다음 출력을 에 전달합니다.NET 트림 기능:
(gci | ft -HideTableHeaders | Out-String).Trim()
이렇게 하면 테이블 전후의 줄 바꿈이 벗겨집니다.
후행 줄 바꿈을 원하는 경우 TrimStart를 사용하여 헤더의 줄 바꿈을 처리할 수도 있습니다.
(gci | ft -HideTableHeaders | Out-String).TrimStart()
다른 접근 방식은 ForEach-Object를 사용하여 개별 항목을 문자열에 투영한 다음 Out-String CmdLet을 사용하여 최종 결과를 문자열 또는 문자열 배열에 투영하는 것입니다.
gci Microsoft.PowerShell.Core\Registry::HKEY_CLASSES_ROOT\CID | foreach { "CID Key {0}" -f $_.Name } | Out-String
#Result: One multi-line string equal to:
@"
CID Key HKEY_CLASSES_ROOT\CID\2a621c8a-7d4b-4d7b-ad60-a957fd70b0d0
CID Key HKEY_CLASSES_ROOT\CID\2ec6f5b2-8cdc-461e-9157-ffa84c11ba7d
CID Key HKEY_CLASSES_ROOT\CID\5da2ceaf-bc35-46e0-aabd-bd826023359b
CID Key HKEY_CLASSES_ROOT\CID\d13ad82e-d4fb-495f-9b78-01d2946e6426
"@
gci Microsoft.PowerShell.Core\Registry::HKEY_CLASSES_ROOT\CID | foreach { "CID Key {0}" -f $_.Name } | Out-String -Stream
#Result: An array of single line strings equal to:
@(
"CID Key HKEY_CLASSES_ROOT\CID\2a621c8a-7d4b-4d7b-ad60-a957fd70b0d0",
"CID Key HKEY_CLASSES_ROOT\CID\2ec6f5b2-8cdc-461e-9157-ffa84c11ba7d",
"CID Key HKEY_CLASSES_ROOT\CID\5da2ceaf-bc35-46e0-aabd-bd826023359b",
"CID Key HKEY_CLASSES_ROOT\CID\d13ad82e-d4fb-495f-9b78-01d2946e6426")
이 방법의 장점은 결과를 변수에 저장할 수 있으며 빈 줄이 없다는 것입니다.
2년이 늦었다는 것은 알지만, 이 답변들은 객체를 출력하고 결과 문자열을 트리밍하는 필터 기능을 만드는 데 도움이 되었습니다.최종 솔루션에서 모든 것을 문자열로 포맷해야 하기 때문에 조금 다르게 진행했습니다.긴 손으로, 제 문제는 매우 비슷하고, 약간 이렇습니다.
$verbosepreference="Continue"
write-verbose (ls | ft | out-string) # this generated too many blank lines
다음은 제 예입니다.
ls | Out-Verbose # out-verbose formats the (pipelined) object(s) and then trims blanks
Out-Verbose 기능은 다음과 같습니다.
filter Out-Verbose{
Param([parameter(valuefrompipeline=$true)][PSObject[]]$InputObject,
[scriptblock]$script={write-verbose "$_"})
Begin {
$val=@()
}
Process {
$val += $inputobject
}
End {
$val | ft -autosize -wrap|out-string |%{$_.split("`r`n")} |?{$_.length} |%{$script.Invoke()}
}
}
참고 1: 이 솔루션은 수백만 개의 객체와 같이 확장되지 않습니다(파이프라인을 연속적으로 처리하지 않음).
참고 2: -noheaddings 옵션을 추가할 수 있습니다.여기서 스크립트 블록을 사용한 이유가 궁금하다면 디스크 파일이나 다른 출력 스트림으로 보내는 것과 같은 오버로드를 허용하는 것입니다.
언급URL : https://stackoverflow.com/questions/3255259/powershell-format-table-without-headers
'source' 카테고리의 다른 글
jQuery 데이터 속성 값으로 요소 찾기 (0) | 2023.08.25 |
---|---|
Powershell의 빠르고 간단한 이진 연결 파일 (0) | 2023.08.25 |
클러스터에서 Galera 노드 제거 (0) | 2023.08.25 |
Angular 9는 로드해야 하는 글로벌 '$localize()' 함수를 도입했습니다. (0) | 2023.08.25 |
Liquibase generateChangeLog maria에 누락된 열 문이 있습니다.DB (0) | 2023.08.25 |