RESTful 웹 서비스 집합에 대한 CLI 프론트 엔드로 상당히 중요한 Posh 모듈을 작성하고 있습니다. 나는 특성화 할 수 있었던 이상한 문제가 있지만 깨끗한 해결책을 찾지 못했습니다.Powershell - 모든 XML 속성이 파이프 라인으로 전달되는 것은 아닙니다
예상 할 속성을 항상 알 수없고 일부 노드는 특정 특성을 가질 수 있지만 다른 노드는 특성을 가질 수 없습니다. 내 문제는 때로는 (읽기 : 자주) 속성이 모든 노드에 존재하지 않는 경우, 그것은 어떤 노드에 대한 파이프 라인 아래로 전달되지 않습니다. XML의 첫 번째 노드에있는 특성과 관련이있는 것으로 보입니다. 그런 다음
[xml]$stuff = Get-Content .\example.xml
: 나는 그것을 가져 오기 및 XML 주조 변수에 할당
<members>
<member>
<name>Joe</name>
<rank>Grand Poobah</rank>
<serialnumber>1234</serialnumber>
</member>
<member>
<name>Fred</name>
<serialnumber>1234</serialnumber>
</member>
</members>
: 아주 간단한 예를 들어
,이 생각은 XML 파일 example.xml의 내용입니다 내가 파이프는 포맷 테이블을하는 (또는 아웃의 gridview, 수출 CSV 등)$stuff.members.member | ft -AutoSize
name rank serialnumber
---- ---- ------------
Joe Grand Poobah 1234
Fred 1234
큰 작동합니다. 첫 번째 노드가 순위 속성이없는 경우
지금 : 지금
<members>
<member>
<name>Fred</name>
<serialnumber>1234</serialnumber>
</member>
<member>
<name>Joe</name>
<rank>Grand Poobah</rank>
<serialnumber>1234</serialnumber>
</member>
</members>
을 내가 같은 가져 오기를 수행 할 때, 파이프를 그것을 통과은 "순위"속성은 파이프 라인을 아래로 전달되지 않습니다 .
$stuff.members.member | ft -AutoSize
name serialnumber
---- ------------
Fred 1234
Joe 1234
나는 명시 적으로 속성 이름을 지정하여 강제 할 수 있습니다 : 속성은 경고없이 추가 할 수있는 명시 적 속성의 이름을 지정
$stuff.members.member | select-object -Property name, rank, serialnumber | ft
name rank serialnumber
---- ---- ------------
Fred 1234
Joe Grand Poobah 1234
는 버그위한 조리법이다. 가능한 경우 새로운 속성을 처리 할 수 있도록 코드를 유연하게 유지하려고합니다.
"select-object -property *"를 사용할 수 있다고 생각했는데, 원하지 않는 XML을 삽입 한 powershell을 많이 추가하고 여전히 순위 특성을 파이프하지 않습니다.
$stuff.members.member | select-object -Property *| ft -AutoSize
name serialnumber LocalName NamespaceURI Prefix NodeType ParentNode OwnerDocument IsEmpty Attributes
---- ------------ --------- ------------ ------ -------- ---------- ------------- ------- ----------
Fred 1234 member Element members #document False {}
Joe 1234 member Element members #document False {}
이 상황을 처리하기위한 좋은 방법에 익숙한 사람이라면 누구입니까? Google 검색에서 좋은 단서를 찾지 못했습니다.
감사합니다. 당신 말이 맞고 설명이 완벽하게 이해되지만 export-csv, out-gridview와 같은 많은 명령에 적용됩니다.방금 포맷 -리스트에 파이핑을 시도했는데, 분명히 표시 할 컬럼을 계산할 필요가 없으며 모든 속성이 보여줍니다. 그래서, 네가 맞아, 그들은 모두 파이프에서 나간다. 감사! – user2678909