개요
Out-String과 Out-Null은 이름의 Out- 접두사가 같지만 정반대 목적을 가진 cmdlet이다. Out-String은 객체를 화면에 표시될 서식 그대로 문자열로 변환해 텍스트 도구에 넘기고, Out-Null은 결과를 화면에도, 파이프라인에도 남기지 않고 완전히 삭제한다. 10장에서 배운 객체 파이프라인 모델에서, 이 둘은 “객체 세계와 텍스트 세계의 경계"와 “출력이 필요 없을 때의 처리"를 각각 담당한다.
사용법
| |
매개변수
| 매개변수 | 대상 | 설명 |
|---|---|---|
-Stream | Out-String | 하나의 큰 문자열 대신 줄마다 별도 문자열 객체로 반환(46장 Select-String 등 줄 단위 도구와 연결할 때 필수) |
-Width | Out-String | 서식 폭(기본은 호스트 너비, 넓혀서 잘림 방지) |
-NoNewline | Out-String | 서식이 만든 줄바꿈 제거(문자열 자체에 포함된 줄바꿈은 유지) |
예시
| |
주의사항·함정
Out-String을 거치지 않고 텍스트 도구에 객체를 바로 넘기면 원하는 결과가 안 나온다: Get-Process | Select-String -Pattern "chrome"처럼 객체를 곧바로 Select-String에 넘기면, PowerShell이 각 객체를 문자열로 자동 변환하는 과정에서 서식이 예상과 다르게 적용돼 검색이 실패하기 쉽다. 46장에서 다룬 Select-String은 원래 텍스트·파일을 다루는 cmdlet이므로, 객체 결과를 검색하려면 먼저 Out-String -Stream으로 명시적으로 줄 단위 텍스트로 바꿔야 한다.
-Stream 없이는 여러 줄이 하나의 문자열로 뭉쳐져 줄 단위 처리가 안 된다: Out-String의 기본 동작은 전체 출력을 개행 문자가 포함된 문자열 하나로 반환하는 것이다. Select-String처럼 “줄마다” 처리하는 cmdlet과 연결하려면 반드시 -Stream을 붙여야 한다 — 빠뜨리면 오류는 나지 않지만 검색이 항상 “모두 일치” 또는 “전혀 일치 안 함"처럼 부자연스럽게 동작한다.
Out-Null과 $null = ...는 결과는 같지만 성능 특성이 다르다: 둘 다 출력을 없애는 데 쓰이지만, Out-Null은 파이프라인을 통해 객체를 흘려보내는 반면 $null = ...는 대입 연산만으로 처리되어 일반적으로 더 빠르다고 알려져 있다. 반복문 안에서 대량으로 출력을 억제해야 한다면 $null = ... 형태를 우선 고려할 만하다.
Out-Null로 버린 결과는 되돌릴 수 없다: New-Item ... | Out-Null처럼 생성 결과를 즉시 버리면, 그 객체(예: 새로 만든 파일의 경로 정보)를 나중에 다시 쓸 수 없다. 생성된 객체 자체가 필요할 가능성이 있다면 Out-Null 대신 변수에 담아 두는 편이 안전하다.
이식성: Out-Null은 Bash·CMD의 > /dev/null, > NUL 리다이렉션과 정확히 같은 역할을 한다. Out-String은 “객체를 텍스트로 강제 변환한다"는 개념 자체가 텍스트 기반 셸에는 없는 동작이다 — 애초에 모든 것이 이미 텍스트인 Bash·CMD에서는 이 변환이 불필요하기 때문이다.
![Featured image of post [PowerShell] 51. Out-String과 Out-Null](/post/powershell/out-string-out-null-command-powershell/wordcloud_hu_7da6fa3723e9b366.webp)
![[PowerShell] 49. Import-Csv/Export-Csv/ConvertTo-Csv](/post/powershell/import-export-csv-command-powershell/wordcloud_hu_41747e6dfda6f23e.webp)
![[PowerShell] 50. ConvertTo-Html과 Out-File](/post/powershell/convertto-html-out-file-powershell/wordcloud_hu_d068d41aa5ff8785.webp)
![[PowerShell] 51. Out-String과 Out-Null](/post/powershell/out-string-out-null-command-powershell/wordcloud_hu_8b71460aee9c6ff1.webp)
![[PowerShell] 52. Get-Date와 TimeSpan](/post/powershell/get-date-timespan-powershell/wordcloud_hu_decf7202c9a21ab2.webp)
![[PowerShell] 53. 스크립트 작성과 실행(.ps1)](/post/powershell/script-execution-ps1-powershell/wordcloud_hu_10c8d6c3936ccc0f.webp)
![[PowerShell] 41. 변수와 데이터 타입](/post/powershell/variables-data-types-powershell/wordcloud_hu_6051f7a36d4700ee.webp)
![[PowerShell] 42. 배열과 컬렉션 기초](/post/powershell/arrays-collections-powershell/wordcloud_hu_c295cc73d4592ae5.webp)
![[PowerShell] 43. ArrayList와 Generic List(List<T>)](/post/powershell/arraylist-generic-list-powershell/wordcloud_hu_a34550a6370cee87.webp)
![[PowerShell] 44. 해시테이블(Hashtable) 다루기](/post/powershell/hash-tables-powershell/wordcloud_hu_d1fd29269ce3c32d.webp)
![[PowerShell] 45. 문자열 서식과 Here-String](/post/powershell/string-formatting-here-string-powershell/wordcloud_hu_6a3265810b79b68e.webp)