Существует ли способ написать сценарий установки обновлений Менеджера конфигурации System Center, перечисленных в Центре программного обеспечения?

Необходимо настроить сервер, что он слушает на 2 IP-адресах.

При определении vhost, можно заставить *:80 затем серверов слушать всего дюйм/с.

5
задан 13 February 2014 в 02:11
2 ответа

Да. Вы можете сделать это с помощью PowerShell, аналогично тому, что пытается сделать опубликованный вами скрипт. Некоторое время назад я наткнулся на этот сценарий, не могу вспомнить, сработал он или нет, но кое-что у меня получилось. Не знаю, почему он не работает, он использует те же методы, но я смог сделать это с .NET и WMI с помощью C #, поэтому я знаю, что это можно сделать с помощью PowerShell.

private void InstallUpdates()
    {
        ManagementScope sc = new ManagementScope(@"\\.\root\ccm\clientsdk");
        ManagementClass c = new ManagementClass(@"CCM_SoftwareUpdatesManager");
        ManagementObjectSearcher s = new ManagementObjectSearcher("SELECT * FROM CCM_SOFTWAREUPDATE WHERE COMPLIANCESTATE=0 AND EVALUATIONSTATE < 2");
        c.Scope = s.Scope = sc;

        ManagementObjectCollection col = s.Get();
        List<ManagementObject> lUpdates = new List<ManagementObject>();

        //Install each update individually and display progress
        int index = 1;

        //double progress = 5/10;

        //progressBar1.Value = progress;
        //this.Enabled = false;

        foreach (ManagementObject o in col)
        {

            System.Management.ManagementBaseObject[] args = { o };

            object[] methodArgs = { args };

            c.InvokeMethod("InstallUpdates", methodArgs);

            lblCurrentUpdate.Text = "Now Installing Update " + index + " of " + col.Count;

            UInt32 evalState = 0;
            progressBar1.Value = (int)(((index) / (double)col.Count)*100.0);

            //isCompleted = false;
            //backgroundWorker1.RunWorkerAsync(o);

            while (evalState < 7)
            {

                try
                {
                    o.Get();
                    evalState = (UInt32)o.Properties["EvaluationState"].Value;
                }

                catch (Exception ex)
                {
                    break;
                }

            }

            ++index;

        }

        //this.Enabled = true;

        //Restart Workstation
        System.Diagnostics.Process.Start("shutdown.exe", "-r -t 0 -f");

        Application.Exit();

    }

Вкратце, я использовал запрос WMI «SELECT * FROM CCM_SOFTWAREUPDATE WHERE COMPLIANCESTATE = 0 AND EVALUATIONSTATE <2» и передавал каждое обновление одно за другим в метод InstallUpdates, потому что я хотел отобразить прогресс похож на то, как это делает Microsoft. Вы должны передать массив методу InstallUpdates, даже если вы передаете только один объект обновления. Вы можете передать весь возвращенный массив, если хотите, и он будет ставить их в очередь, как всегда, устанавливая их один за другим.

Кроме того, как насчет настройки окна обслуживания для этой коллекции и указания sccm не устанавливать обновления вне окна обслуживания? По завершении одного обновления, если оно прошло через окно обслуживания, оно перестанет устанавливать обновления (теоретически для меня у меня никогда не было роскошных окон обслуживания).

если вы gimmiedehcodez любезный человек, этот код должен компилироваться с .NET 4.0 и

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Management;
using System.Windows.Forms;

Дополнительная информация о CCMClientSDK здесь

2
ответ дан 3 December 2019 в 01:51

Вот что я собрал из различных веб-страниц. Используя Powershell. Обратите внимание, что вам будет лучше использовать WinRM (winrm quickconfig на удаленных серверах для включения WinRM), который может использовать команду Invoke-Command вместо Invoke-WmiMethod, но этот метод работает для меня на сервере 2008 и более новых серверах. Для Server 2003, проверка оценки установки Updates работает, но Powershell будет жаловаться на что-то. Запустите команды локально, чтобы обойти это.

#Start the System Center Configuration Manager Software Updates Deployment Evaluation Scan
$trigger = '{00000000-0000-0000-0000-000000000108}'
$scan = Invoke-WmiMethod -ComputerName $server -Namespace root\ccm -Class sms_client -Name TriggerSchedule $trigger

[System.Management.ManagementObject[]] $CMMissingUpdates = @(GWMI -ComputerName $server -query "SELECT * FROM CCM_SoftwareUpdate WHERE ComplianceState = '0'" -namespace "ROOT\ccm\ClientSDK") #End Get update count.
(GWMI -ComputerName $server -Namespace "root\ccm\clientsdk" -Class "CCM_SoftwareUpdatesManager" -List).InstallUpdates($CMMissingUpdates)
1
ответ дан 3 December 2019 в 01:51

Теги

Похожие вопросы