2014-06-24 17 views
5

Sto provando a creare il mio insieme di cmdlet per uno snapshot di PowerShell. Il problema che sto avendo è che ho creato il mio oggetto che ho creato e popolato con il metodo ProcessRecord ma non riesco a cambiare il tipo di ritorno per permettermi di restituire l'oggetto che ho creato.Restituzione di un oggetto dal cmdlet 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; 
} 

Questo è il mio metodo ProcessRecord ma come è sovrascrivendo quello da PSCmdlet non posso cambiare il tipo di ritorno da vuoto.

Qualcuno può aiutare con il modo migliore per restituire l'oggetto rptFileSettings così come posso quindi utilizzarlo con i suoi valori in altri cmdlet?

+0

perché si vuole tornare nulla dal metodo 'ProcessRecord'? Ha uno scopo molto specifico e non è utile per il valore restituito nel [ciclo di vita dell'elaborazione del cmdlet] (http://msdn.microsoft.com/en-us/library/ms714429 (v = vs.85) .aspx) . – famousgarkin

+0

Sono nuovo in PowerShell e sto creando i cmdlet di PowerShell e così sto cercando di imparare mentre vado, purtroppo, – user1865044

+0

, vedo. Se si desidera solo passare l'oggetto creato lungo la pipeline all'output o un altro cmdlet per l'elaborazione, ciò viene eseguito utilizzando ['Cmdlet.WriteObject'] (http://msdn.microsoft.com/en-us/library/ms568371 (v = vs.85) .aspx) metodo. Nel tuo caso 'WriteObject (rptFileSettings);'. – famousgarkin

risposta

6

Non è mai necessario restituire un valore dal metodo Cmdlet.ProcessRecord. Questo metodo ha il posto e il modo di utilizzo specifici nello PowerShell cmdlet processing lifecycle.

Il passaggio degli oggetti lungo la pipeline di elaborazione del cmdlet viene gestito dal framework. Allo stesso modo in cui l'istanza del cmdlet ottiene i dati di input, è possibile inviare i dati all'output per un'ulteriore elaborazione. Il passaggio degli oggetti all'output avviene tramite il metodo Cmdlet.WriteObject all'interno dei metodi di elaborazione dell'input, ovvero BeginProcessing, ProcessRecord e EndProcessing.

per passare il costruito rptFileSettings oggetto per l'output cmdlet avete solo bisogno di fare questo:

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