protected override void ProcessRecord() { this.SetOptions(); this.SetScope(Server); this.SetManagementPath(Identity); ManagementObject wmiRecord = this.Get(); WmiRecordClass WmiRecordClassName = (WmiRecordClass)Enum.Parse(typeof(WmiRecordClass), (String)wmiRecord.Properties["__CLASS"].Value); String NewPath = String.Empty; #region Parameter Set validation Boolean Terminate = false; switch (ParameterSetName) { case "PS0": break; case "PS1": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_AType & WmiRecordClassName != WmiRecordClass.MicrosoftDNS_AAAAType & WmiRecordClassName != WmiRecordClass.MicrosoftDNS_WKSType) { Terminate = true; } break; case "PS2": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_CNAMEType & WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MBType & WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MDType & WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MFType & WmiRecordClassName != WmiRecordClass.MicrosoftDNS_NSType & WmiRecordClassName != WmiRecordClass.MicrosoftDNS_PTRType) { Terminate = true; } break; case "PS3": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MGType & WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MRType) { Terminate = true; } break; case "PS4": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_TXTType) { Terminate = true; } break; case "PS5": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_HINFOType) { Terminate = true; } break; case "PS6": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_ISDNType) { Terminate = true; } break; case "PS7": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MINFOType) { Terminate = true; } break; case "PS8": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_NXTType) { Terminate = true; } break; case "PS9": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_RPType) { Terminate = true; } break; case "PS10": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_AFSDBType) { Terminate = true; } break; case "PS11": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MXType & WmiRecordClassName != WmiRecordClass.MicrosoftDNS_RTType) { Terminate = true; } break; case "PS12": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_X25Type) { Terminate = true; } break; case "PS13": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_SOAType) { Terminate = true; } break; case "PS14": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_SRVType) { Terminate = true; } break; case "PS15": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_WINSType) { Terminate = true; } break; case "PS16": if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_WINSRType) { Terminate = true; } break; } if (Terminate) { ThrowTerminatingError( new ErrorRecord( new PSInvalidOperationException("InvalidParameterSetForRecordType"), "InvalidOperation", ErrorCategory.InvalidOperation, typeof(ManagementCmdlet))); } #endregion if (ShouldProcess((String)wmiRecord.Properties["TextRepresentation"].Value)) { switch (WmiRecordClassName) { case WmiRecordClass.MicrosoftDNS_AType: A ARecord = new A(wmiRecord, Server); NewPath = ARecord.Modify(TTL, Address.ToString()); break; case WmiRecordClass.MicrosoftDNS_AAAAType: AAAA AAAARecord = new AAAA(wmiRecord, Server); NewPath = AAAARecord.Modify(TTL, Address.ToString()); break; case WmiRecordClass.MicrosoftDNS_AFSDBType: AFSDB AFSDBRecord = new AFSDB(wmiRecord, Server); NewPath = AFSDBRecord.Modify(TTL, SubType, TargetName); break; case WmiRecordClass.MicrosoftDNS_CNAMEType: CNAME CNAMERecord = new CNAME(wmiRecord, Server); NewPath = CNAMERecord.Modify(TTL, Hostname); break; case WmiRecordClass.MicrosoftDNS_HINFOType: HINFO HINFORecord = new HINFO(wmiRecord, Server); NewPath = HINFORecord.Modify(TTL, CPU, OS); break; case WmiRecordClass.MicrosoftDNS_ISDNType: ISDN ISDNRecord = new ISDN(wmiRecord, Server); NewPath = ISDNRecord.Modify(TTL, ISDNNumber, SubAddress); break; case WmiRecordClass.MicrosoftDNS_MBType: MB MBRecord = new MB(wmiRecord, Server); NewPath = MBRecord.Modify(TTL, Hostname); break; case WmiRecordClass.MicrosoftDNS_MDType: MD MDRecord = new MD(wmiRecord, Server); NewPath = MDRecord.Modify(TTL, Hostname); break; case WmiRecordClass.MicrosoftDNS_MFType: MF MFRecord = new MF(wmiRecord, Server); NewPath = MFRecord.Modify(TTL, Hostname); break; case WmiRecordClass.MicrosoftDNS_MGType: MG MGRecord = new MG(wmiRecord, Server); NewPath = MGRecord.Modify(TTL, MailboxName); break; case WmiRecordClass.MicrosoftDNS_MINFOType: MINFO MINFORecord = new MINFO(wmiRecord, Server); NewPath = MINFORecord.Modify(TTL, ResponsibleMailbox, ErrorMailbox); break; case WmiRecordClass.MicrosoftDNS_MRType: MR MRRecord = new MR(wmiRecord, Server); NewPath = MRRecord.Modify(TTL, MailboxName); break; case WmiRecordClass.MicrosoftDNS_MXType: MX MXRecord = new MX(wmiRecord, Server); NewPath = MXRecord.Modify(TTL, Preference, TargetName); break; case WmiRecordClass.MicrosoftDNS_NSType: NS NSRecord = new NS(wmiRecord, Server); NewPath = NSRecord.Modify(TTL, Hostname); break; case WmiRecordClass.MicrosoftDNS_NXTType: NXT NXTRecord = new NXT(wmiRecord, Server); NewPath = NXTRecord.Modify(TTL, NextDomainName, Types); break; case WmiRecordClass.MicrosoftDNS_PTRType: PTR PTRRecord = new PTR(wmiRecord, Server); NewPath = PTRRecord.Modify(TTL, Hostname); break; case WmiRecordClass.MicrosoftDNS_RPType: RP RPRecord = new RP(wmiRecord, Server); NewPath = RPRecord.Modify(TTL, ResponsibleMailbox, TXTDomainName); break; case WmiRecordClass.MicrosoftDNS_RTType: RT RTRecord = new RT(wmiRecord, Server); NewPath = RTRecord.Modify(TTL, Preference, TargetName); break; case WmiRecordClass.MicrosoftDNS_SOAType: SOA SOARecord = new SOA(wmiRecord, Server); NewPath = SOARecord.Modify(TTL, SerialNumber, SOAServer, ResponsibleMailbox, RefreshInterval, RetryDelay, ExpireLimit, MinimumTTL); break; case WmiRecordClass.MicrosoftDNS_SRVType: SRV SRVRecord = new SRV(wmiRecord, Server); NewPath = SRVRecord.Modify(TTL, Priority, Weight, Port, TargetName); break; case WmiRecordClass.MicrosoftDNS_TXTType: TXT TXTRecord = new TXT(wmiRecord, Server); NewPath = TXTRecord.Modify(TTL, Text); break; case WmiRecordClass.MicrosoftDNS_WINSType: WINS WINSRecord = new WINS(wmiRecord, Server); NewPath = WINSRecord.Modify(TTL, MappingFlag, LookupTimeout, CacheTimeout, String.Join(" ", WinsServers)); break; case WmiRecordClass.MicrosoftDNS_WINSRType: WINSR WINSRRecord = new WINSR(wmiRecord, Server); NewPath = WINSRRecord.Modify(TTL, MappingFlag, LookupTimeout, CacheTimeout, ResultDomain); break; case WmiRecordClass.MicrosoftDNS_WKSType: WKS WKSRecord = new WKS(wmiRecord, Server); NewPath = WKSRecord.Modify(Address, TTL, IPProtocol, String.Join(" ", Services)); break; case WmiRecordClass.MicrosoftDNS_X25Type: X25 X25Record = new X25(wmiRecord, Server); NewPath = X25Record.Modify(TTL, PSDNAddress); break; default: ThrowTerminatingError( new ErrorRecord( new PSNotSupportedException("Unsupported Record Type"), "RecordModificationNotSupported", ErrorCategory.NotImplemented, typeof(ManagementCmdlet))); break; } if (PassThru) { this.SetManagementPath(NewPath); wmiRecord = this.Get(); WriteRecord(wmiRecord); } } }