2014-06-24 22 views
5

Tôi đang cố gắng tạo tập hợp lệnh ghép ngắn riêng cho một snapshot PowerShell. Vấn đề tôi gặp phải là tôi đã tạo đối tượng của riêng mình mà tôi tạo và điền vào trong phương thức ProcessRecord nhưng tôi không thể thay đổi kiểu trả về để cho phép tôi trả về đối tượng mà tôi đã tạo.Trả về một đối tượng từ lệnh ghép ngắn PowerShell

protected override void ProcessRecord() 
{ 
    ReportFileSettings rptFileSettings = new ReportFileSettings(); 
    rptFileSettings.Enabled = string.Equals((reader.GetAttribute("Enabled").ToString().ToLower()), "yes"); 
    rptFileSettings.FileLocation = reader.GetAttribute("FileLocation").ToString(); 
    rptFileSettings.OverwriteExisting = string.Equals(reader.GetAttribute("OverwriteExistingFile").ToString().ToLower(), "yes"); 
    rptFileSettings.NoOfDaysToKeep = int.Parse(reader.GetAttribute("NumberOfDaysToKeep").ToString()); 
    rptFileSettings.ArchiveFileLocation = reader.GetAttribute("ArchiveFileLocation").ToString(); 

    return rptFileSettings; 
} 

Đây là phương pháp ProcessRecord của tôi nhưng nó ghi đè từ PSCmdlet tôi không thể thay đổi kiểu trả về.

Bất kỳ ai có thể trợ giúp cách tốt nhất để trả lại đối tượng rptFileSettings để sau đó tôi có thể sử dụng nó với các giá trị của nó trong các lệnh ghép ngắn khác không?

+0

Tại sao bạn sẽ muốn quay trở lại bất cứ điều gì từ 'phương pháp ProcessRecord'? Nó có một mục đích rất cụ thể và không sử dụng cho giá trị trả về trong [vòng đời xử lý cmdlet] (http://msdn.microsoft.com/en-us/library/ms714429 (v = vs.85) .aspx) . – famousgarkin

+0

Tôi mới sử dụng PowerShell và tạo ra các lệnh ghép ngắn PowerShell và vì vậy tôi đang cố gắng học như tôi thật không may – user1865044

+0

Tôi hiểu. Nếu bạn chỉ muốn truyền đối tượng đã tạo ra xuống đường dẫn đến đầu ra hoặc một lệnh ghép ngắn khác để xử lý thì việc này được thực hiện bằng cách sử dụng ['Cmdlet.WriteObject'] (http://msdn.microsoft.com/en-us/library/ms568371 (v = vs.85) .aspx) phương pháp. Trong trường hợp của bạn là 'WriteObject (rptFileSettings);'. – famousgarkin

Trả lời

6

Bạn không bao giờ cần trả lại giá trị từ phương thức Cmdlet.ProcessRecord. Phương pháp này có địa điểm và cách sử dụng cụ thể trong PowerShell cmdlet processing lifecycle.

Chuyển đối tượng xuống đường ống xử lý lệnh ghép ngắn được xử lý bởi khung công tác cho bạn. Tương tự như trường hợp cmdlet của bạn lấy dữ liệu đầu vào, nó có thể gửi dữ liệu đến đầu ra để xử lý tiếp. Việc truyền các đối tượng tới đầu ra được thực hiện bằng phương thức Cmdlet.WriteObject bên trong các phương thức xử lý đầu vào, đó là BeginProcessing, ProcessRecordEndProcessing.

Để vượt qua xây dựng rptFileSettings đối tượng để ra lệnh của bạn, bạn chỉ cần làm điều này:

protected override void ProcessRecord() 
{ 
    ReportFileSettings rptFileSettings = new ReportFileSettings(); 
    ... 
    WriteObject(rptFileSettings); 
} 
Các vấn đề liên quan