Src/Announcement.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Management.Automation;
using System.Collections;
using Microsoft.EnterpriseManagement;
using Microsoft.EnterpriseManagement.Common;
using Microsoft.EnterpriseManagement.Configuration;
 
namespace SMLets
{
    [Cmdlet(VerbsCommon.New, "SCSMAnnouncement", SupportsShouldProcess = true)]
    public class AddAnnouncement : SMCmdletBase
    {
        
        #region Parameters
        private String _DisplayName = null;
        private String _Body = null;
        private String _Priority = null;
        private DateTime _ExpirationDate;
         
        [Parameter(Position = 0,
            Mandatory = true,
            ValueFromPipelineByPropertyName = true,
            HelpMessage = "The title of the annoucncement.")]
        [ValidateNotNullOrEmpty]
        public string DisplayName
        {
            get{return _DisplayName;}
            set{_DisplayName = value;}
        }
         
        [Parameter(Position = 1,
        Mandatory = true,
        ValueFromPipelineByPropertyName = true,
        HelpMessage = "The body of the announcement")]
        [ValidateNotNullOrEmpty]
        public string Body
        {
            get{return _Body;}
            set{_Body = value;}
        }
 
        [Parameter(Position = 2,
        Mandatory = false,
        ValueFromPipelineByPropertyName = true,
        HelpMessage = "The priority of the announcement. Must be exactly 'Low', 'Medium', or 'Critical'.")]
        [ValidateNotNullOrEmpty]
        [ValidateSet("Low","Medium","Critical")]
        public string Priority
        {
            get { return _Priority; }
            set { _Priority = value; }
        }
 
        [Parameter(Position = 3,
        Mandatory = true,
        ValueFromPipelineByPropertyName = true,
        HelpMessage = "The expiration date of the announcement. Pass a datetime object. Convert to UTC time first. Required.")]
        [ValidateNotNullOrEmpty]
        public DateTime ExpirationDate
        {
            get { return _ExpirationDate; }
            set { _ExpirationDate = value; }
        }
 
        private SwitchParameter _passThru;
        [Parameter]
        public SwitchParameter PassThru
        {
            get { return _passThru; }
            set { _passThru = value; }
        }
 
 
        #endregion
 
        protected override void ProcessRecord()
        {
            try
            {
                ManagementPackClass clsAnnouncement = SMHelpers.GetManagementPackClass(ClassTypes.System_Announcement_Item, SMHelpers.GetManagementPack(ManagementPacks.System_AdminItem_Library, _mg), _mg);
                ManagementPackEnumeration enumPriority = null;
                switch (_Priority)
                {
                    case "Low":
                        enumPriority = SMHelpers.GetEnum(Enumerations.System_Announcement_PriorityEnum_Low, _mg);
                        break;
                    case "Critical":
                        enumPriority = SMHelpers.GetEnum(Enumerations.System_Announcement_PriorityEnum_Critical, _mg);
                        break;
                    case "Medium":
                        enumPriority = SMHelpers.GetEnum(Enumerations.System_Announcement_PriorityEnum_Medium, _mg);
                        break;
                    default:
                        enumPriority = SMHelpers.GetEnum(Enumerations.System_Announcement_PriorityEnum_Medium, _mg);
                        break;
                }
 
                CreatableEnterpriseManagementObject emo = new CreatableEnterpriseManagementObject(_mg, clsAnnouncement);
 
                emo[clsAnnouncement, "Id"].Value = System.Guid.NewGuid().ToString();
                if(_DisplayName != null)
                    emo[clsAnnouncement, "DisplayName"].Value = _DisplayName;
                    emo[clsAnnouncement, "Title"].Value = _DisplayName;
                 
                if(_Body != null)
                    emo[clsAnnouncement, "Body"].Value = _Body;
                emo[clsAnnouncement, "Priority"].Value = enumPriority.Id;
                emo[clsAnnouncement, "ExpirationDate"].Value = _ExpirationDate;
 
                emo.Commit();
                if ( _passThru )
                {
                    WriteObject(ServiceManagerObjectHelper.AdaptManagementObject(this, _mg.EntityObjects.GetObject<EnterpriseManagementObject>(emo.Id, ObjectQueryOptions.Default)));
                }
 
            }
            catch (Exception)
            {
            }
        }
 
    }
 
    [Cmdlet(VerbsCommon.Get, "SCSMAnnouncement", SupportsShouldProcess = true)]
    public class GetAnnouncement : SMCmdletBase
    {
 
        protected override void ProcessRecord()
        {
            try
            {
                ManagementPackClass clsAnnouncement = SMHelpers.GetManagementPackClass(ClassTypes.System_Announcement_Item, SMHelpers.GetManagementPack(ManagementPacks.System_AdminItem_Library, _mg), _mg);
                foreach(EnterpriseManagementObject emo in _mg.EntityObjects.GetObjectReader<EnterpriseManagementObject>(clsAnnouncement,ObjectQueryOptions.Default))
                {
                    WriteObject(ServiceManagerObjectHelper.AdaptManagementObject(this, emo));
                }
            }
            catch (Exception)
            {
            }
        }
    }
 
    [Cmdlet(VerbsCommon.Set, "SCSMAnnouncement", SupportsShouldProcess = true)]
    public class SetAnnouncement : SMCmdletBase
    {
 
        #region Parameters
        private String _DisplayName = null;
        private String _Body = null;
        private String _Priority = null;
        private DateTime? _ExpirationDate = null;
        private String _InternalID = null;
 
        [Parameter(Position = 0, HelpMessage = "The title of the announcement.")]
        public string DisplayName
        {
            get { return _DisplayName; }
            set { _DisplayName = value; }
        }
 
        [Parameter(Position = 1, HelpMessage = "The body of the announcement")]
        public string Body
        {
            get { return _Body; }
            set { _Body = value; }
        }
 
        [Parameter(Position = 2, HelpMessage = "The priority of the announcement. Must be exactly 'Low', 'Medium', or 'Critical'.")]
        [ValidateSet("Low","Medium","Critical")]
        public string Priority
        {
            get { return _Priority; }
            set { _Priority = value; }
        }
 
        [Parameter(Position = 3, HelpMessage = "The expiration date of the announcement. Pass a datetime object. Convert to UTC time first.")]
        public DateTime? ExpirationDate
        {
            get { return _ExpirationDate; }
            set { _ExpirationDate = value; }
        }
 
        [Parameter(Position = 4,
        Mandatory = true,
        ParameterSetName = "ById",
        HelpMessage = "The internal ID (GUID) of the announcement.")]
        public String InternalID
        {
            get { return _InternalID; }
            set { _InternalID = value; }
        }
 
        private EnterpriseManagementObject _announcement = null;
        [Parameter(ValueFromPipeline=true,
            Mandatory=true,
            ParameterSetName = "ByObject")]
        public EnterpriseManagementObject Announcement
        {
            get { return _announcement; }
            set { _announcement = value; }
        }
 
        private SwitchParameter _passThru;
        [Parameter]
        public SwitchParameter PassThru
        {
            get { return _passThru; }
            set { _passThru = value; }
        }
 
        #endregion
     
 
        private ManagementPackEnumeration enumPriority = null;
        private ManagementPackClass clsAnnouncement = null;
        protected override void BeginProcessing()
        {
            // the base.BeginProcesing must come first as it sets up the enterprisemanagementgroup!
            base.BeginProcessing();
            ManagementPackClass clsAnnouncement = SMHelpers.GetManagementPackClass(ClassTypes.System_Announcement_Item, SMHelpers.GetManagementPack(ManagementPacks.System_AdminItem_Library, _mg), _mg);
            // Compare the string case insenstively
            if ( _Priority != null)
            {
                if ( String.Compare(_Priority, "low", true ) == 0 )
                {
                    enumPriority = SMHelpers.GetEnum(Enumerations.System_Announcement_PriorityEnum_Low, _mg);
                }
                else if ( String.Compare(_Priority, "critical", true ) == 0 )
                {
                    enumPriority = SMHelpers.GetEnum(Enumerations.System_Announcement_PriorityEnum_Critical, _mg);
                }
                else if ( String.Compare(_Priority, "medium", true ) == 0 )
                {
                    enumPriority = SMHelpers.GetEnum(Enumerations.System_Announcement_PriorityEnum_Medium, _mg);
                }
                else
                {
                    ThrowTerminatingError( new ErrorRecord(new ArgumentException("Priority"), "Priority must be low/medium/critical", ErrorCategory.InvalidOperation, _Priority));
                }
            }
        }
 
        protected override void ProcessRecord()
        {
            try
            {
 
                if ( _announcement != null )
                {
                    WriteVerbose("Setting by instance");
 
                    bool change = false;
                    if ( _DisplayName != null )
                    {
                        WriteDebug("Setting instance Name");
                        _announcement[null, "DisplayName"].Value = _DisplayName;
                        _announcement[null,"Title"].Value = _DisplayName;
                        change = true;
                    }
                    if ( _Body != null )
                    {
                        WriteDebug("Setting instance Body");
                        _announcement[null, "Body"].Value = _Body;
                        change = true;
                    }
                    if ( _Priority != null )
                    {
                        WriteDebug("Setting instance Priority");
                        _announcement[null, "Priority"].Value = enumPriority.Id;
                        change = true;
                    }
                    if ( _ExpirationDate != null )
                    {
                        WriteDebug("Setting instance ExpirationDate");
                        _announcement[null, "ExpirationDate"].Value = _ExpirationDate;
                        change = true;
                    }
                    if ( change )
                    {
                        WriteDebug("Overwriting instance");
                        _announcement.Overwrite();
                        if ( _passThru ) { WriteObject(ServiceManagerObjectHelper.AdaptManagementObject(this, _announcement)); }
                    }
 
                }
                else if (_InternalID != null)
                {
 
                    bool change = false;
                    WriteVerbose("Setting by ID");
                    EnterpriseManagementObject emo = _mg.EntityObjects.GetObject<EnterpriseManagementObject>(new Guid(_InternalID), ObjectQueryOptions.Default);
                    if ( _DisplayName != null )
                    {
                        emo[clsAnnouncement, "DisplayName"].Value = _DisplayName;
                        emo[clsAnnouncement,"Title"].Value = _DisplayName;
                        change = true;
                    }
                    if ( _Body != null )
                    {
                        emo[clsAnnouncement, "Body"].Value = _Body;
                        change = true;
                    }
                    if ( _Priority != null )
                    {
                        emo[clsAnnouncement, "Priority"].Value = enumPriority.Id;
                        change = true;
                    }
                    if ( _ExpirationDate != null )
                    {
                        emo[clsAnnouncement, "ExpirationDate"].Value = _ExpirationDate;
                        change = true;
                    }
                    if ( change )
                    {
                        emo.Overwrite();
                        if ( _passThru ) { WriteObject(ServiceManagerObjectHelper.AdaptManagementObject(this, emo)); }
                    }
                     
                }
            }
            catch (Exception exception)
            {
                WriteError(new ErrorRecord(exception, "Object", ErrorCategory.NotSpecified, "Announcement"));
            }
        }
 
    }
}