2012-09-24 2 views
1

저는이 문제에 대해 지금까지 몇 시간 씩 놀랐습니다. 누군가가 올바른 방향으로 나를 도울 수 있기를 바랍니다.Powershell에서 가져 오기/내보내기 할 때 개체 유형이 변경되었습니다.

몇 가지 사용자 지정 PowerShell cmdlet을 개발 중이며 지원 클래스 중 하나가 사용자 개체입니다. 내 cmdlet 중 일부는 List를 내보내거나 소비합니다.

이것은 지금까지 아주 잘 진행되었지만 목록 중 하나를 직렬화하려고 할 때 심각한 장애를 일으켰습니다. 수출이 잘 된 것 같습니다. 나는 파일 (csv, clixml 등)을 보았고, 사용자 유형을 기대하는 방식으로 보였다. 그러나 다시 가져올 때 형식이 CSV : Class.User 또는 Deserialized.Class.User로 변경되는 것 같습니다. 분명히 표준 사용자 클래스를 요구하는 cmdlet에 공급되면 문제가 발생합니다.

이 문제를 해결하는 좋은 방법이 있습니까? 필자는 목록 대신 일부 인터페이스를 기대하기 위해 내 cmdlet을 변경하면 트릭을 수행 할 수 있다고 생각했지만 인터페이스가 무엇인지 알아낼 수 없습니다. 클래스 이름을 지정하기 위해 가져 오기 메소드로 전환 할 필요가 없습니다.

도움을 주시면 감사하겠습니다.

답변

3

PowerShell의 확장 유형 시스템에 오신 것을 환영합니다. :-) 또한 개체가 원격 세션에서 전달 될 때 상태 전용 비 직렬화 된 개체를 다시 가져옵니다. Deserialized.Class.User를 찾는 PSObject의 TypeNames 컬렉션을 쿼리하여 형식의 역 직렬화 버전이 있는지 확인할 수 있습니다. Sames는 CSV 버전입니다. 사용자 클래스 (CSV 또는 Deserialized) 인 PSObject를 가져 와서 일반 Class.User 객체를 만드는 User 클래스에 몇 가지 팩토리 메서드 또는 복제 스타일 생성자를 만들 수 있습니다. deserialization 경우에는 특정 작업이 의미가 없을 수 있음을 명심하십시오. 예를 들어, Process 객체를 예로 들자면, Process 객체에서 Kill을 호출 할 수 있으며, 객체가 작동 할 동일한 머신에서 나온 것이라면 (올바른 priv를 가정하여). 그러나 다른 컴퓨터의 프로세스 개체에서 Kill을 호출하면 작동하지 않습니다. 따라서 특별히 데이터 (속성) 컨테이너 인 특수한 deserialized 개체가 있습니다.

관련 문제