문제

파일의 내용을 검색하고 필터링하고 수정하고 결과를 파일에 다시 작성하고 싶습니다. 나는 이것을한다:

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top