Удаление конфигурации PowerShell DSC

Можно ли удалить конфигурацию DSC с компьютера после ее применения?

Например, у меня есть блок configuration следующим образом:

configuration SevenZip {
    Script Install7Zip {
        GetScript = {
            $7ZipFolder = '{0}\7-Zip' -f $env:ProgramFiles;
            $Result = @{
                Result = '';
                }
            if (Test-Path -Path $7ZipFolder) {
                $Result.Result = 'Present';
            }
            else {
                $Result.Result = 'Nonpresent';
            }
            Write-Verbose -Message $Result.Result;
            $Result;
        }
        SetScript = {
            $7ZipUri = 'http://colocrossing.dl.sourceforge.net/project/sevenzip/7-Zip/9.20/7z920-x64.msi';
            $OutputFile = '{0}\7-Zip.msi' -f $env:TEMP;
            Invoke-WebRequest -Uri $7ZipUri -OutFile $OutputFile;
            Write-Verbose -Message ('Finished downloading 7-Zip MSI file to {0}.' -f $OutputFile);

            $ArgumentList = '/package "{0}" /passive /norestart /l*v "{1}\Install 7-Zip 9.20 64-bit.log"' -f $OutputFile, $env:TEMP;
            $Process = Start-Process -FilePath msiexec.exe -ArgumentList $ArgumentList -Wait -PassThru;
            Write-Verbose -Message ('Process finished with exit code: {0}' -f $Process.ExitCode);
            Remove-Item -Path $OutputFile;
            Write-Verbose -Message ('Removed MSI file: {0}' -f $OutputFile);
        }
        TestScript = {
            $7ZipFolder = '{0}\7-Zip' -f $env:ProgramFiles;
            if (Test-Path -Path $7ZipFolder) {
                $true;
            }
            else {
                $false;
            }
        }
    }    
}

Этот блок конфигурации создаст MOF, который использует ресурс Script для установки 7-Zip 9.20 64-bit в системе, к которой он применяется, если приложение не найдено.

Как после применения этой конфигурации с помощью приведенных ниже команд ее можно удалить из системы, если 7-Zip больше не требуется?

SevenZip -OutputPath c:\dsc\7-Zip;
Start-DscConfiguration -Wait -Path C:\dsc\7-Zip -Verbose;

person Trevor Sullivan    schedule 16.08.2014    source источник


Ответы (6)


Командлет Remove-DscConfigurationDocument поможет https://technet.microsoft.com/en-us/library/mt143544.aspx

Командлет Remove-DscConfigurationDocument удаляет документ конфигурации (файл .mof) из хранилища конфигурации DSC. Во время настройки командлет Start-DscConfiguration копирует файл .mof в папку на целевом компьютере. Этот командлет удаляет этот документ конфигурации и выполняет дополнительную очистку.

person Craig - MSFT    schedule 03.12.2015

Чтобы удалить установку 7zip из области действия, вы можете применить другую конфигурацию, не указывающую 7zip. Конфигурации не «откатываются», поэтому, если они были установлены, они останутся установленными. Если его удалить позже, он не будет повторно установлен.

Вы также можете пойти по ручному маршруту и ​​удалить документ конфигурации из c:\windows\system32\configuration. Вам нужно будет удалить Current.mof, backup.mof и, возможно, Previous.mof.

person Steven Murawski    schedule 27.08.2014

Стивен прав. Когда я запускаю это:

Remove-Item C:\Windows\System32\Configuration\Current.mof, C:\Windows\System32\Configuration\backup.mof, C:\Windows\System32\Configuration\Previous.mof

Теперь Get-DscConfiguration возвращает ту же ошибку, что и чистая машина:

Get-DscConfiguration: Текущая конфигурация не существует. Сначала запустите конфигурацию DSC, чтобы создать текущую конфигурацию.

Это то, что я искал. Я понимаю, что он не возвращает конфигурацию. Я просто хотел «отменить» применяемую конфигурацию.

Спасибо!

person Ashley McGlone - GoateePFE    schedule 27.08.2014
comment
Да, это была цель этого вопроса! :) - person Trevor Sullivan; 28.08.2014

Ресурс может быть только Present(обязательным) или Absent(нежелательным) в конфигурации. Чтобы потом откатить конфиг, нужно применить новую конфигурацию. Ресурсы сценария в DSC не поддерживают свойство Убедитесь, поэтому, чтобы отменить сценарий, вам необходимо создать модифицированный ресурс сценария в новой конфигурации, насколько мне известно.

Конфигурация должна включать TestScript, которая возвращает false, если 7zip установлен, и SetScript, которая удаляет программное обеспечение. Почти противоположно тому, что у вас сейчас.

Вы также можете изменить свои конфигурации, чтобы ресурс скрипта загружал msi-файл локально, а затем имел ресурс пакета для его фактической установки (или удаления) с DependsOn, установленным для скрипта загрузки. Это был бы более чистый подход к конфигурации. Единственная разница между install-config и uninstall-config будет заключаться в Ensure = Present и Ensure = Absent в ресурсе пакета, который устанавливает/удаляет msi.

В любом случае вам необходимо применить новую конфигурацию, в которой будет указано, что программное обеспечение не должно устанавливаться.

Если 7zip требуется только во время вашей конфигурации (для выполнения некоторых других ресурсов скрипта), то, возможно, вы могли бы сделать следующее (не проверено):

configuration ExtractFolder {

    Script Download7zip {
        GetScript = { }
        SetScript = { #downloads msi locally }
        TestScript = { }
    }

    Package Install7zip
    {
        Ensure = "Present"
        Path  = "c:\pathToMsi\7zip.msi"
        Name = "7Zip"
        ProductId = "ACDDCDAF-80C6-41E6-A1B9-8ABD8A05027E" #7zip prodid
        DependsOn = [Script]Download7zip
    } 

    Script RunScript{
        GetScript = { }
        SetScript = { #unpack some file using 7zip }
        TestScript = { }
        DependsOn = [Package]Install7zip
    }

    Package Uninstall7zip
    {
        Ensure = "Absent"
        Path  = "c:\pathToMsi\7zip.msi"
        Name = "7Zip"
        ProductId = "ACDDCDAF-80C6-41E6-A1B9-8ABD8A05027E" #7zip prodid
        DependsOn = [Script]RunScript
    }
}

Если описанный выше подход работает, может потребоваться, чтобы для настроек ConfigurationMode было установлено значение ApplyOnly. Мониторинг и автоматическое применение, вероятно, будут сбиты с толку двумя ресурсами пакета, которые делают противоположное друг другу.

person Frode F.    schedule 16.08.2014
comment
Спасибо за ответ, но я не хочу, чтобы 7-Zip не был установлен. Я просто не хочу, чтобы конфигурация применялась вообще, потому что мне все равно, установлен 7-Zip или нет. Например, что, если я применю к серверу 500 различных конфигураций, и в итоге это замедлит его работу? Как удалить некоторые или все эти конфигурации? - person Trevor Sullivan; 16.08.2014
comment
Привет @CookieMonster! У меня сложилось впечатление, что конфигурации всегда применяются к системе, пока в диспетчере локальной конфигурации DSC (LCM) ConfigurationMode установлено значение ApplyAndAutocorrect. Насколько я знаю, это относится к обеим конфигурациям push/pull. Дайте мне знать, если я ошибаюсь. technet.microsoft.com/en-us/library/dn249922.aspx - person Trevor Sullivan; 16.08.2014
comment
@TrevorSullivan Re: если вы применили к серверу 500 различных конфигураций, к серверу можно применить только одну конфигурацию. Он может иметь 500 определенных ресурсов. Если это замедляет работу системы, то лучшим вариантом будет либо настройка тестовых функций ресурсов, либо замена конфигурации на что-то урезанное и мониторинг состояния другим способом. - person Steven Murawski; 27.08.2014

Может быть, сработает применение «пустой» конфигурации?

Звучит так, как будто DSC — это улица с односторонним движением. Как только вы примените конфигурацию, вам придется продолжать использовать DSC для управления этим сервером. Установка LCM на ApplyOnly была бы не лучшей идеей, потому что вы, возможно, захотите применить что-то еще к этой машине в какой-то момент?

person David O'Brien    schedule 17.08.2014

Я предполагаю, что вы должны реализовать конфигурацию сценария удаления самостоятельно. Я не думаю, что вы можете вернуть свою конфигурацию обратно.

Мне кажется, вы должны были назвать свою конфигурацию как-то вроде «Install-SevenZip».

Кстати, спасибо за эту интересную иллюстрацию того, как использовать ресурс Script.

В противном случае, проверяли ли вы ресурс Package для управления установкой вашего приложения? Это может быть более уместно, даже я не знаю, можно или нет скачать пакет из Интернета с этого ресурса, как это делаете вы.

person Arnaud Petitjean    schedule 16.08.2014