PowerShell : 파일에 대한 출력 객체 [
-
06-07-2019 - |
문제
파일의 내용을 검색하고 필터링하고 수정하고 결과를 파일에 다시 작성하고 싶습니다. 나는 이것을한다:
PS C:\code> "test1" >> test.txt
PS C:\code> "test2" >> test.txt
PS C:\code> $testContents = Get-Content test.txt
PS C:\code> $newTestContents = $testContents | Select-Object {"abc -" + $_}
PS C:\code> $newTestContents >> output.txt
output.txt가 포함되어 있습니다
"abc -" + $_
------------
abc -test1
abc -test2
그 첫 줄로 무엇을 제공합니까? Foreach가 ienumerable을 돌려주는 것과 거의 비슷하지만 $ newTestContents.getType ()가 객체 배열임을 밝힙니다. 그래서 무엇을 제공합니까? 이상한 헤더없이 배열을 정상적으로 출력 할 수있는 방법은 무엇입니까?
또한 $ newTestContents [0] .ToString ()이 빈 문자열 인 이유를 알려줄 수 있다면 보너스 포인트
해결책
select-robject 대신에 foreach를 사용하십시오
다른 팁
또한 $ newTestContents [0] .ToString ()이 빈 문자열 인 이유를 알려줄 수 있다면 보너스 포인트
유형을 보면 pscustomobject 예를 들어
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
반사경에서 pscustomobject의 tostring () 명소를 보면 다음을 볼 수 있습니다.
public override string ToString()
{
return "";
}
왜 그렇게하는지 모르겠습니다. 그러나 PowerShell에서 문자열 유형 강요를 사용하는 것이 더 낫습니다.
PS> [string]$newTestContents[0]
@{"abc -" + $_=abc -test1}
아마도 당신은이 결과를 찾고 있었을 것입니다.
PS> $newTestContents | %{$_.{"abc -" + $_}}
abc -test1
abc -test2
이것은 간단한 스크립트 블록과 함께 Select-Object를 사용하면 해당 스크립트 블록의 내용이 생성 된 pscustomObject에서 새 속성 이름을 형성 함을 보여줍니다. 일반적으로 Nestor의 접근 방식은 이와 같은 속성을 합성 해야하는 경우 앞으로는 다음과 같은 해시 테이블을 사용해야합니다.
PS> $newTestContents = $testContents | Select @{n='MyName';e={"abc -" + $_}}
PS> $newTestContents
MyName
------
abc -test1
abc -test2
PS> $newTestContents[0].MyName
abc -test1