2016-06-06 2 views
0

On * nix 시스템에서는 프로그램이 tty에서 실행되는지 또는 출력이 일반 스트림 (파이프 또는 파일)인지 쉽게 알 수 있으므로 적절하게 출력을 조정합니다 (예 : 예쁜 인쇄 또는 직렬화). PowerShell에서도 같은 작업을 수행 할 수 있습니까?함수 출력이 리디렉션되는지 확인하는 방법은 무엇입니까?

직접 처리 (스크립트에서 실행되거나 다른 명령으로 파이프 될 때)로 결과를 출력하거나 PS 프롬프트에서 직접 호출 할 때 Format-Table -AutoSize과 같은 것을 사용하고 싶습니다. PS에서이를 달성하기위한 적절한 방법은 무엇입니까?

+1

PowerShell 콘솔 호스트는 대화 형 출력을 암시 적으로 'Out-Default' 명령으로 파이프하므로 출력이 항상 리디렉션됩니다. – PetSerAl

+0

PowerShell은 텍스트가 아닌 개체를 출력하므로 수행해야 할 작업이 필요한지 확신 할 수 없습니다. 그냥 출력하고 사용자가 출력 형식을 지정하는 방법을 결정하게하십시오. –

+0

이 질문에 이미 답변 한 것으로 나타났습니다. https://stackoverflow.com/questions/4549776/can-i-determine-if-a-powershell-function-is-running-as-part-of-a-pipeline – Emsi

답변

0

사용자에게 서식 지정 cmdlet을 사용할지 여부를 결정하는 것이 좋습니다. 출력 개체에 default display property set을 추가하면 PowerShell은 기본적으로 일부 속성 집합 만 표시합니다. format cmdlet을 -Property *과 함께 호출하면 전체 속성 집합을 계속 표시 할 수 있습니다.

$properties = 'a', 'b', ... # list of property names 
$object = ...     # your object 

$defaultPropertySet = New-Object Management.Automation.PSPropertySet('DefaultDisplayPropertySet', [string[]]$properties) 
$standardMembers = [Management.Automation.PSMemberInfo[]]@($defaultPropertySet) 
$object | Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $standardMembers 

이 작업에는 PowerShell v3 이상이 필요합니다.

관련 문제