Czy ujawniając zestaw powiązanych funkcji w cmdletach Powershell, można udostępniać nazwy właściwości i pomoc skróconą, aby znormalizować je w cmdletach w zespole?Czy można udostępniać właściwości i komentarze między cmdletami Powershell w języku C#?
Wiem, że można to zrobić z klasami pochodnymi, ale to rozwiązanie jest niezręczne w najlepszym przypadku, gdy istnieje wiele poleceń cmdlet z różnymi właściwościami do współdzielenia.
Oto niezwykle prosty przykład. Chciałbym udostępnić właściwość "Name" i wszystkie powiązane komentarze tak, aby były takie same w poleceniach cm, które produkujemy, ale nie mogę wymyślić dobrego sposobu na zrobienie tego w języku C#. W idealnym przypadku udostępnianie umożliwi specyfikację atrybutów parametrów, takich jak Obowiązkowe lub Pozycja.
namespace FrozCmdlets
{
using System.Management.Automation;
/// <summary>
/// Adds a new froz to the system.
/// </summary>
[Cmdlet(VerbsCommon.Add, "Froz")]
public class AddFroz : Cmdlet
{
/// <summary>
/// The name of the froz.
/// For more information on the froz, see froz help manual.
/// </summary>
[Parameter]
public string Name { get; set; }
protected override void ProcessRecord()
{
base.ProcessRecord();
// Add the froz here
}
}
/// <summary>
/// Removes a froz from the system.
/// </summary>
[Cmdlet(VerbsCommon.Remove, "Froz")]
public class RemoveFroz : Cmdlet
{
/// <summary>
/// The name of the froz.
/// For more information on the froz, see froz help manual.
/// </summary>
[Parameter]
public string Name { get; set; }
protected override void ProcessRecord()
{
base.ProcessRecord();
// Remove the froz here
}
}
}
Jeśli nie chcesz wyprowadzać (nie mam jasności co do przyczyny), najlepszym sposobem na dzielenie się komentarzami jest użycie XML (patrz kod źródłowy frameworka). Zachowujesz dokumentację kodu poza swoim kodem, można ją napisać i konserwować (jeśli jest to konieczne) przez kogoś innego i można ją udostępniać w klasach, a nawet w złożeniach. –
@Adriano Dzięki za pomysł, aby spojrzeć na udostępnianie komentarzy za pośrednictwem XML obejmuje. Powodem, dla którego nie chce się wywodzić, jest to, że można to zrobić w sposób czysty. Jeśli cmdlet A używa P1, P2, podczas gdy cmdlet B używa P2, P3 i cmdlet C używa P1, P3, nie ma sposobu na wyprowadzenie i udostępnienie P1, P2, P3 według potrzeb. Mam także świadomość, że mój pomysł dzielenia się tymi właściwościami może nie być uzasadniony. Właśnie stało się kłopotliwe aktualizowanie N miejsc, gdy coś się zmienia i na pewno nienawidzę kopiować i wklejać kodu. – pennyowe
Och, masz rację! Po prostu myślałem, że mają wiele wspólnych właściwości. Jedyny sposób, w jaki myślę to zrobić, to poprzez włączenie (ale jest to w porządku tylko dla komentarzy). Pewnego dnia (może ...) będziemy mieć wiele dziedzin ... –