2014-06-24 25 views
5

Bir PowerShell eklentisi için kendi cmdlet'ler kümemi oluşturmaya çalışıyorum. Sorun şu ki, ProcessRecord yönteminde oluşturduğum ve doldurduğum kendi nesneyi oluşturduğum, ancak yarattığım nesneyi döndürmeme izin vermek için dönüş türünü değiştiremiyorum.Bir nesneyi PowerShell cmdlet'inden döndürme

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; 
} 

Bu benim ProcessRecord yöntemdir ama PSCmdlet birini geçersiz kılma gibi ben boşluk dönüş türünü değiştiremezsiniz.

rptFileSettings nesnesini döndürmek için en iyi yöntemden herhangi biri yardımcı olabilir, böylece diğer cmdlet'lerde değerleriyle kullanabilir miyim?

+0

Neden 'ProcessRecord' yönteminden şey dönmek isterim:

sadece bu işlemi yapmanız gerekir cmdlet çıkışına inşa rptFileSettings nesneyi geçmek için? Çok özel bir amacı vardır ve [cmdlet işleme yaşam döngüsünde] döndürülen değer için hiçbir kullanım yoktur (http://msdn.microsoft.com/en-us/library/ms714429 (v = vs.85) .aspx) . – famousgarkin

+0

Ben powershell için yeni ve powershell cmdlet'leri yaratıyorum ve ne yazık ki ben – user1865044

+0

görüyorum öğrenmeye çalışıyorum. Oluşturulan nesneyi çıktılamak için boru hattına veya işlem için başka bir cmdlet'e aktarmak istiyorsanız, bu işlem ['Cmdlet.WriteObject'] kullanılarak yapılır (http://msdn.microsoft.com/en-us/library/ms568371 (v = vs85) .aspx) yöntemi. Senin durumunda 'WriteObject (rptFileSettings);'. – famousgarkin

cevap

6

Cmdlet.ProcessRecord yönteminden bir değer döndürmeniz gerekmez. Bu yöntemin, PowerShell cmdlet processing lifecycle'da belirli bir yeri ve kullanım şekli vardır.

Nesneleri cmdlet işleme boru hattından geçirmek, sizin tarafınızdan çerçeve tarafından ele alınır. Cmdlet örneğinizle aynı şekilde, daha fazla işlem için verileri çıktıya gönderebileceği girdi verilerini alır. Nesnelerin çıkışa iletilmesi, giriş işleme yöntemlerinin içinde Cmdlet.WriteObject yöntemi kullanılarak yapılır, yani BeginProcessing, ProcessRecord ve EndProcessing.

protected override void ProcessRecord() 
{ 
    ReportFileSettings rptFileSettings = new ReportFileSettings(); 
    ... 
    WriteObject(rptFileSettings); 
}