Пример #1
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            SCCMServer = settings.SCCMSERVER;
            userName   = settings.UserName;
            password   = settings.Password;

            String DisplayName    = request.Inputs["Display Name"].AsString();
            String Description    = request.Inputs["Description"].AsString();
            String InformativeURL = request.Inputs["Informative URL"].AsString();
            String LocaleID       = request.Inputs["LocaleID"].AsString();
            String UpdatesList    = request.Inputs["Updates List (CSV)"].AsString();

            //Setup WQL Connection and WMI Management Scope
            WqlConnectionManager connection = CM2012Interop.connectSCCMServer(SCCMServer, userName, password);

            using (connection)
            {
                try
                {
                    IResultObject col = CM2012Interop.createSCCMAuthorizationList(connection, DisplayName, Description, InformativeURL, LocaleID, UpdatesList);
                    if (col != null)
                    {
                        response.WithFiltering().PublishRange(getObjects(col));
                    }
                }
                catch (Exception ex)
                {
                    response.LogErrorMessage(ex.Message);
                }

                response.Publish("Number of Packages", ObjCount);
            }
        }
Пример #2
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            String results    = "Success";
            String KeyPath    = request.Inputs["Key Path:  HKLM:\\"].AsString();
            String ServerName = request.Inputs["Server Name"].AsString();

            try
            {
                RegistryKey rk = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ServerName);
                rk.DeleteSubKeyTree(KeyPath);
                rk.OpenSubKey(KeyPath);
                if (rk.Name == null)
                {
                    results = "Success";
                }
                else
                {
                    results = "Failure";
                }
            }
            catch (Exception ex)
            {
                response.LogErrorMessage(ex.Message.ToString());
                throw ex;
            }

            response.Publish("Results", results);
        }
Пример #3
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            string destinationFile         = request.Inputs["Destination Location"].AsString();
            string originZip               = request.Inputs["Origin Zip"].AsString();
            string destinationExistsChoice = request.Inputs["If the Destination Files Exist"].AsString();

            int    numberOfFiles = 0;
            bool   warn          = false;
            String warnMessage   = String.Empty;

            DirectoryInfo DestinationFolder = new DirectoryInfo(destinationFile);
            FileInfo      zipFile           = new FileInfo(originZip);

            if (zipFile.Exists)
            {
                if (!DestinationFolder.Exists)
                {
                    DestinationFolder.Create();
                }

                using (ZipFile zip1 = ZipFile.Read(zipFile.FullName.ToString()))
                {
                    foreach (ZipEntry e in zip1)
                    {
                        numberOfFiles = numberOfFiles + 1;
                        try
                        {
                            switch (destinationExistsChoice)
                            {
                            case "Overwrite":
                                e.Extract(DestinationFolder.ToString(), ExtractExistingFileAction.OverwriteSilently);
                                break;

                            case "Do not overwrite":
                                e.Extract(DestinationFolder.ToString(), ExtractExistingFileAction.DoNotOverwrite);
                                break;

                            default:
                                e.Extract(DestinationFolder.ToString(), ExtractExistingFileAction.OverwriteSilently);
                                break;
                            }
                        }
                        catch (Exception error) { warn = true; warnMessage += error.Message + "\n"; }
                    }
                }
            }
            else
            {
                response.LogErrorMessage("Cannot find Zip file " + request.Inputs["Origin Zip"].AsString());
            }

            response.Publish("Destination Location", DestinationFolder.FullName.ToString());
            response.Publish("Number of files decompressed", numberOfFiles.ToString());

            if (warn)
            {
                response.LogWarningMessage(warnMessage);
            }
        }
Пример #4
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            SCCMServer = settings.SCCMSERVER;
            userName   = settings.UserName;
            password   = settings.Password;

            String varType = request.Inputs["Variable Name"].AsString();

            MachineName = request.Inputs["Machine Name"].AsString();

            String resourceID = String.Empty;

            if (request.Inputs.Contains("Resource ID"))
            {
                resourceID = request.Inputs["Resource ID"].AsString();
            }

            //Setup WQL Connection and WMI Management Scope
            WqlConnectionManager connection = CMInterop.connectSCCMServer(SCCMServer, userName, password);

            using (connection)
            {
                //Get Computer Object
                IResultObject computerObj = null;
                IResultObject col         = null;
                if (resourceID.Equals(String.Empty))
                {
                    col = CMInterop.getSCCMComputer(connection, "", MachineName, "");
                }
                else
                {
                    col = CMInterop.getSCCMComputer(connection, resourceID, "", "");
                }

                foreach (IResultObject c in col)
                {
                    computerObj = c;
                    if (computerObj != null)
                    {
                        //Get Variables from Comoputer Object
                        List <IResultObject> variableCollection = CMInterop.getSCCMComputerVariables(connection, computerObj["ResourceID"].IntegerValue.ToString());

                        if (variableCollection != null)
                        {
                            response.WithFiltering().PublishRange(getComputerVariables(variableCollection));
                            response.Publish("Number of Machine Variables", variableCollection.Count);
                        }
                        response.Publish("Number of Machine Variables", 0);
                    }
                    else
                    {
                        response.LogErrorMessage("Could Not Find Computer " + MachineName);
                    }
                }
            }
        }
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            String RunbookIdentifier = request.Inputs["Runbook Identifier"].AsString();
            String IdentifierType    = request.Inputs["Identifier Type"].AsString();
            String jobStatus         = String.Empty;

            if (request.Inputs.Contains("Job Status"))
            {
                jobStatus = request.Inputs["Job Status"].AsString();
            }
            OrchestratorContext sco = new OrchestratorContext(new Uri(Credentials.OrchestratorServiceURL));

            sco.Credentials = new NetworkCredential(Credentials.UserName, Credentials.Password, Credentials.Domain);
            sco.MergeOption = MergeOption.OverwriteChanges;

            JobInstance[] jobInstance = new JobInstance[0];

            switch (IdentifierType)
            {
            case "Runbook Path":
                if (jobStatus.Equals(String.Empty))
                {
                    jobInstance = SCOrch.getRunbookJobInstances(sco, RunbookIdentifier);
                }
                else
                {
                    jobInstance = SCOrch.getRunbookJobInstances(sco, RunbookIdentifier, jobStatus);
                }
                break;

            case "Runbook GUID":
                Guid runbookGUID = new Guid(RunbookIdentifier);
                if (jobStatus.Equals(String.Empty))
                {
                    jobInstance = SCOrch.getRunbookJobInstances(sco, runbookGUID);
                }
                else
                {
                    jobInstance = SCOrch.getRunbookJobInstances(sco, runbookGUID, jobStatus);
                }
                break;

            default:
                response.LogErrorMessage("Must choose Runbook Path or Runbook GUID as an Identifier Type");
                break;
            }
            response.WithFiltering().PublishRange(parseResults(jobInstance));
            response.Publish("Number of Jobs", numberOfJobs);
        }
Пример #6
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            String results      = "";
            String KeyPath      = request.Inputs["Key Path:  HKLM:\\"].AsString();
            String ServerName   = request.Inputs["Server Name"].AsString();
            String ValueName    = request.Inputs["Value Name"].AsString();
            String NewValue     = request.Inputs["New Value"].AsString();
            string registryHive = "default";

            if (request.Inputs.Contains("Registry Hive"))
            {
                registryHive = request.Inputs["Registry Hive"].AsString();
            }

            try
            {
                RegistryKey rk;
                switch (registryHive.ToLower())
                {
                case "32 Bit":
                    //rk = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ServerName, RegistryView.Registry32);
                    rk = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ServerName);
                    break;

                case "64 Bit":
                    //rk = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ServerName, RegistryView.Registry64);
                    rk = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ServerName);
                    break;

                default:
                    rk = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ServerName);
                    break;
                }

                RegistryKey sk = rk.CreateSubKey(KeyPath);
                sk.SetValue(ValueName, NewValue);
                results = sk.GetValue(ValueName).ToString();
            }
            catch (Exception ex)
            {
                response.LogErrorMessage(ex.Message.ToString());
                throw ex;
            }

            response.Publish("Results", results);
        }
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            SCCMServer = settings.SCCMSERVER;
            userName   = settings.UserName;
            password   = settings.Password;

            String objID          = request.Inputs["Collection ID"].AsString();
            String membershipType = request.Inputs["Direct Membership Type"].AsString();
            int    resourceID     = (int)request.Inputs["ResourceID"].AsUInt32();

            //Setup WQL Connection and WMI Management Scope
            WqlConnectionManager connection = CM2012Interop.connectSCCMServer(SCCMServer, userName, password);

            using (connection)
            {
                switch (membershipType)
                {
                case "System":
                    CM2012Interop.addDirectSCCMCollectionMemberMachine(connection, objID, resourceID);
                    break;

                case "User":
                    CM2012Interop.addDirectSCCMCollectionMemberUser(connection, objID, resourceID);
                    break;

                case "User Group":
                    CM2012Interop.addDirectSCCMCollectionMemberUserGroup(connection, objID, resourceID);
                    break;

                default:
                    response.LogErrorMessage("Invalid Direct Membership Type");
                    break;
                }

                IResultObject col = null;
                col = CM2012Interop.getSCCMCollection(connection, "CollectionID LIKE '" + objID + "'");

                if (col != null)
                {
                    response.WithFiltering().PublishRange(getObjects(col));
                }
                response.Publish("Number of Collections", ObjCount);
            }
        }
Пример #8
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            String sourcePath     = request.Inputs["Source File Path"].AsString();
            String savePath       = request.Inputs["Destination File Path"].AsString();
            bool   overwriteLocal = Convert.ToBoolean(request.Inputs["Overwrite Local File"].AsString());

            using (FtpConnection ftp = new FtpConnection(settings.FtpServer, settings.Port, settings.UserName, settings.Password))
            {
                ftp.Open();
                ftp.Login();

                if (ftp.FileExists(sourcePath))
                {
                    ftp.GetFile(sourcePath, savePath, overwriteLocal);
                }
                else
                {
                    response.LogErrorMessage("File does not exist at " + sourcePath);
                }
            }
        }
Пример #9
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            SCCMServer = settings.SCCMSERVER;
            userName   = settings.UserName;
            password   = settings.Password;

            String machineName  = request.Inputs["Machine Name"].AsString();
            String variableName = request.Inputs["Variable Name"].AsString();


            //Setup WQL Connection and WMI Management Scope
            WqlConnectionManager connection = CMInterop.connectSCCMServer(SCCMServer, userName, password);

            using (connection)
            {
                //Get Computer Object
                IResultObject computerObj = null;
                IResultObject col         = CMInterop.getSCCMComputer(connection, "", machineName, "");
                foreach (IResultObject c in col)
                {
                    computerObj = c;
                    break;
                }

                if (computerObj != null)
                {
                    CMInterop.deleteSCCMComputerVariable(connection, variableName, computerObj["ResourceID"].StringValue);

                    response.Publish("Variable Name", variableName);
                    response.Publish("Machine Name", machineName);
                }
                else
                {
                    response.LogErrorMessage("Could not find machine " + machineName);
                }
            }
        }
Пример #10
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            string originFolder            = request.Inputs["Origin Folder"].AsString();
            string destinationFile         = request.Inputs["Destination File"].AsString();
            string destinationExistsChoice = request.Inputs["If the Destination Archive already exists"].AsString();
            string compressionLevel        = request.Inputs["Compression Level"].AsString();

            FileInfo destFile = new FileInfo(destinationFile);

            if (destFile.Exists)
            {
                switch (destinationExistsChoice)
                {
                case "Add Files to Existing Archive":
                    using (ZipFile zipFile = new ZipFile(destFile.FullName))
                    {
                        DirectoryInfo origFolder = new DirectoryInfo(originFolder);
                        zipFile.AddItem(origFolder.FullName.ToString());
                        int count = zipFile.Count;
                        switch (compressionLevel)
                        {
                        case "None":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.None;
                            break;

                        case "Low":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.Level1;
                            break;

                        case "Medium":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
                            break;

                        case "High":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
                            break;

                        default:
                            break;
                        }

                        zipFile.Save();
                        response.Publish("Archive Name and Path", destinationFile);
                    }
                    break;

                default:
                case "Overwrite Existing Archive":
                    destFile.Delete();
                    using (ZipFile zipFile = new ZipFile())
                    {
                        DirectoryInfo origFolder = new DirectoryInfo(originFolder);
                        zipFile.AddItem(origFolder.FullName.ToString());

                        switch (compressionLevel)
                        {
                        case "None":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.None;
                            break;

                        case "Low":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.Level1;
                            break;

                        case "Medium":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
                            break;

                        case "High":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
                            break;
                        }

                        zipFile.Save();
                        response.Publish("Archive Name and Path", destinationFile);
                    }
                    break;

                case "Fail if the Archive Exists":
                    response.LogErrorMessage("File Archive already Exists");
                    throw new Exception("File Archive already Exists");

                case "Create a unique named Archive":
                    destinationFile = destinationFile + DateTime.Now.ToString();
                    using (ZipFile zipFile = new ZipFile(destinationFile))
                    {
                        DirectoryInfo origFolder = new DirectoryInfo(originFolder);
                        zipFile.AddItem(origFolder.FullName.ToString());

                        switch (compressionLevel)
                        {
                        case "None":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.None;
                            break;

                        case "Low":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.Level1;
                            break;

                        case "Medium":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
                            break;

                        case "High":
                            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
                            break;

                        default:
                            break;
                        }

                        zipFile.Save();
                        response.Publish("Archive Name and Path", destinationFile);
                    }
                    break;
                }
            }
            else
            {
                using (ZipFile zipFile = new ZipFile(destFile.FullName))
                {
                    DirectoryInfo origFolder = new DirectoryInfo(originFolder);
                    zipFile.AddItem(origFolder.FullName.ToString());

                    switch (compressionLevel)
                    {
                    case "None":
                        zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.None;
                        break;

                    case "Low":
                        zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.Level1;
                        break;

                    case "Medium":
                        zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
                        break;

                    case "High":
                        zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
                        break;

                    default:
                        break;
                    }

                    zipFile.Save();
                    response.Publish("Archive Name and Path", destinationFile);
                }
            }
        }
Пример #11
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            SCCMServer = settings.SCCMSERVER;
            userName   = settings.UserName;
            password   = settings.Password;

            String pkgID           = request.Inputs["Existing Package ID"].AsString();
            String selectionMethod = request.Inputs["Distribution Point Selection Method"].AsString();
            String criteria        = request.Inputs["Selection Criteria"].AsString();
            String NALPathQuery    = request.Inputs["NAL Path Query (Single DP)"].AsString();
            //Setup WQL Connection and WMI Management Scope
            WqlConnectionManager connection = CMInterop.connectSCCMServer(SCCMServer, userName, password);

            using (connection)
            {
                switch (selectionMethod)
                {
                case "Single Distribution Point":
                    if (criteria.Equals(String.Empty) || NALPathQuery.Equals(String.Empty))
                    {
                        response.LogErrorMessage("Must use optional property 'Selection Criteria' with Single DP Selection.  Criteria should be DP Name to refresh Package at.  Must also provide a NALPathQuery");
                    }
                    else
                    {
                        IResultObject obj = CMInterop.getSCCMComputer(connection, "", criteria, "");
                        foreach (IResultObject comp in obj)
                        {
                            system DP = new system(comp);

                            bool success = false;

                            foreach (String siteCode in DP.AgentSite.Split(','))
                            {
                                try
                                {
                                    CMInterop.refreshSCCMPackageAtDistributionPoint(connection, pkgID, siteCode, criteria, NALPathQuery);
                                    success = true;
                                    break;
                                }
                                catch { }
                            }

                            if (!success)
                            {
                                throw new Exception("Failed to remove package to DP");
                            }
                        }
                    }
                    break;

                case "Distribution Point Group":
                    if (criteria.Equals(String.Empty))
                    {
                        response.LogErrorMessage("Must use optional property 'Selection Criteria' with DP Group Selection.  Criteria should be DP Group Name to refresh Package at");
                    }
                    else
                    {
                        CMInterop.refreshSCCMPackageAtDistributionPointGroup(connection, pkgID, criteria);
                    }
                    break;

                case "All Distribution Points":
                    CMInterop.refreshSCCMPackageAtAllDistributionPoints(connection, pkgID);
                    break;
                }

                response.Publish("Package ID", pkgID);
            }
        }
Пример #12
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            String computerName   = request.Inputs["Computer Name"].AsString();
            String localGroupName = request.Inputs["Local Group Name"].AsString();
            String userName       = request.Inputs["User Name"].AsString();
            String domain         = request.Inputs["Domain"].AsString();

            String aUserName     = String.Empty;
            String aUserDomain   = String.Empty;
            String aUserPassword = String.Empty;

            if (request.Inputs.Contains("Alternate Connection Username"))
            {
                aUserName = request.Inputs["Alternate Connection Username"].AsString();
            }
            if (request.Inputs.Contains("Alternate Connection User Domain"))
            {
                aUserDomain = request.Inputs["Alternate Connection User Domain"].AsString();
            }
            if (request.Inputs.Contains("Alternate Connection Password"))
            {
                aUserPassword = request.Inputs["Alternate Connection Password"].AsString();
            }

            try
            {
                DirectoryEntry AD;
                if (aUserName.Equals(String.Empty) || aUserDomain.Equals(String.Empty) || aUserPassword.Equals(String.Empty))
                {
                    AD = new DirectoryEntry("WinNT://" + computerName + ",computer");
                }
                else
                {
                    AD = new DirectoryEntry("WinNT://" + computerName + ",computer", string.Format("{0}@{1}", aUserName, aUserDomain), aUserPassword);
                }

                if (domain != null)
                {
                    DirectoryEntry Domain;
                    if (aUserName.Equals(String.Empty) || aUserDomain.Equals(String.Empty) || aUserPassword.Equals(String.Empty))
                    {
                        Domain = new DirectoryEntry("WinNT://" + domain);
                    }
                    else
                    {
                        Domain = new DirectoryEntry("WinNT://" + domain, string.Format("{0}@{1}", aUserName, aUserDomain), aUserPassword);
                    }
                    DirectoryEntry user = Domain.Children.Find(userName, "User");

                    DirectoryEntry grp = AD.Children.Find(localGroupName, "group");
                    if (grp != null)
                    {
                        grp.Invoke("Add", new object[] { user.Path.ToString() });
                        grp.Close();
                        response.Publish("Group Name", localGroupName);
                        response.Publish("User Name", user.Path.ToString());
                    }
                    else
                    {
                        response.ReportErrorEvent("Failed to find local group", ""); throw new Exception("Failed to find local group");
                    }
                }
                else
                {
                    DirectoryEntry user = AD.Children.Find(userName, "User");

                    DirectoryEntry grp = AD.Children.Find(localGroupName, "group");
                    if (grp != null)
                    {
                        grp.Invoke("Add", new object[] { user.Path.ToString() });
                        grp.Close();
                        response.Publish("Group Name", localGroupName);
                        response.Publish("User Name", user.Path.ToString());
                    }
                    else
                    {
                        response.LogErrorMessage("Failed to find local group"); throw new Exception("Failed to find local group");
                    }
                }
            }
            catch (Exception ex)
            {
                response.LogErrorMessage("Failed to add user to local group\n" + ex.Message.ToString());
                throw ex;
            }
        }
Пример #13
0
        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            SCCMServer = settings.SCCMSERVER;
            userName   = settings.UserName;
            password   = settings.Password;

            String machineName   = request.Inputs["Machine Name"].AsString();
            String variableName  = request.Inputs["Variable Name"].AsString();
            String variableValue = request.Inputs["Variable Value"].AsString();
            String machineSite   = String.Empty;


            String resourceID = String.Empty;

            if (request.Inputs.Contains("Machine Site"))
            {
                machineSite = request.Inputs["Machine Site"].AsString();
            }
            if (request.Inputs.Contains("Resource ID"))
            {
                resourceID = request.Inputs["Resource ID"].AsString();
            }
            //Setup WQL Connection and WMI Management Scope
            WqlConnectionManager connection = CM2012Interop.connectSCCMServer(SCCMServer, userName, password);

            using (connection)
            {
                //Get Computer Object
                IResultObject computerObj = null;

                IResultObject col = null;
                if (resourceID.Equals(String.Empty))
                {
                    col = CM2012Interop.getSCCMComputer(connection, "", machineName, "");
                }
                else
                {
                    col = CM2012Interop.getSCCMComputer(connection, resourceID, "", "");
                }

                foreach (IResultObject c in col)
                {
                    computerObj = c;
                    if (computerObj != null)
                    {
                        if (machineSite.Equals(String.Empty))
                        {
                            String SiteCode = determineComputerSiteCode(computerObj);
                            CM2012Interop.createSCCMComputerVariable(connection, SiteCode, variableName, variableValue, false, computerObj["ResourceID"].IntegerValue);
                        }
                        else
                        {
                            CM2012Interop.createSCCMComputerVariable(connection, machineSite, variableName, variableValue, false, computerObj["ResourceID"].IntegerValue);
                        }

                        response.Publish("Variable Name", variableName);
                        response.Publish("Variable Value", variableValue);
                        response.Publish("Machine Name", machineName);
                    }
                    else
                    {
                        response.LogErrorMessage("Could not find machine " + machineName);
                    }
                }
            }
        }