Đó là chấp nhận được đầu ra bất cứ loại đối tượng là tốt nhất sử dụng để đại diện cho những gì bạn đang viết ra - một DataSet là hoàn toàn tốt. Cảnh báo tiềm ẩn duy nhất là v2 của PowerShell có thể tự chạy trên phiên bản .NET Framework (chẳng hạn như trên Server Core), vì vậy nếu đó là kịch bản tiềm năng cho lệnh ghép ngắn của bạn, bạn cần thận trọng để đảm bảo đối tượng bạn đang xuất hiện tồn tại trên mọi hệ thống nơi lệnh ghép ngắn của bạn có thể được sử dụng.
Tất cả những gì đã nói, đường ống hoạt động tốt nhất khi nó chứa các bộ sưu tập đối tượng; một DataSet không phải là một bộ sưu tập. Nói cách khác, bạn muốn các cmdlets ở hạ lưu có thể nhận được một đối tượng tại một thời điểm thông qua đường dẫn, để các lệnh ghép ngắn đó không phải liệt kê thủ công thông qua một đối tượng. Tôi không biết nhiều về chính xác những gì bạn đang làm - nó cũng có thể là một DataSet là hoàn toàn thích hợp - nhưng tôi thường muốn nhìn thấy một vòng lặp cmdlet thông qua DataSet trong nội bộ, tạo các đối tượng tùy chỉnh của riêng nó (để mỗi cột trong bảng sẽ trở thành thuộc tính) và xuất các đối tượng đó vào đường dẫn. Điều đó chỉ đơn giản là làm tăng số lượng cmdlets hạ lưu có thể tiêu thụ những gì bạn đang đưa ra.
Thử nghiệm đơn giản là đưa đầu ra cmdlet của bạn vào Xuất-CSV. Nếu nó hoạt động (và nó có thể sẽ không với một DataSet), sau đó bạn đang làm điều đúng thường. Bây giờ, bạn cũng có thể cần phải tạo một lệnh ghép ngắn xuất ra một DataSet và bạn chỉ có có ý định cho một số lệnh ghép ngắn khác mà bạn đã viết (tiêu thụ DataSets) để hoạt động dựa trên đầu ra đó. Không có gì sai với điều đó. Mặc dù vậy, tính linh hoạt tối đa là các đối tượng đơn vì nó cho phép tất cả các lệnh ghép ngắn cốt lõi của PowerShell hoạt động trên đầu ra của bạn.
Hy vọng điều đó sẽ hữu ích.
Nguồn
2009-01-14 15:50:59