删除PowerShell DSC配置

时间:2014-08-16 04:06:46

标签: 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,该MOF使用Script资源在应用它的系统上安装7-Zip 9.20 64位。

使用以下命令后,如果不再需要7-Zip,如何从系统删除

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

6 个答案:

答案 0 :(得分:8)

要将7zip安装移出范围,可以应用另一个未指定7zip的配置。配置不会回滚"所以,如果安装它,它将保持安装。如果以后删除它,则不会重新安装。

您也可以使用手动路由并从c:\ windows \ system32 \ configuration中删除配置文档。您需要删除Current.mof,backup.mof以及可能的Previous.mof。

答案 1 :(得分:6)

Remove-DscConfigurationDocument可以解决问题 https://technet.microsoft.com/en-us/library/mt143544.aspx

  

Remove-DscConfigurationDocument cmdlet从DSC配置存储中删除配置文档(.mof文件)。在配置期间,Start-DscConfiguration cmdlet将.mof文件复制到目标计算机上的文件夹中。此cmdlet删除该配置文档并执行其他清理。

答案 2 :(得分:4)

史蒂文是对的。当我运行时:

删除项目C:\ Windows \ System32 \ Configuration \ Current.mof,C:\ Windows \ System32 \ Configuration \ backup.mof,C:\ Windows \ System32 \ Configuration \ Previous.mof

现在,Get-DscConfiguration返回与干净机器相同的错误:

Get-DscConfiguration:当前配置不存在。首先启动DSC配置以创建当前配置。

这就是我想要的。我知道它没有恢复配置。我只想"撤消"正在应用的配置。

谢谢!

答案 3 :(得分:3)

配置中的资源只能是Present(必需)或Absent(不需要)。要在以后回滚配置,您需要应用新配置。 DSC中的脚本资源不支持Ensure属性,因此要反转在新配置AFAIK中创建修改后的脚本资源所需的脚本。

配置应包括TestScript,如果安装了7zip则返回false,以及卸载软件的SetScript。与现在的情况完全相反。

您还可以修改配置以使脚本资源在本地下载msi文件,然后使用Package资源实际安装(或卸载它),并将DependsOn设置为download-script。这将是一种更干净的配置方法。 install-config和uninstall-config之间的唯一区别在于安装/卸载msi的Package-resource中的Ensure = Present vs Ensure = Absent

无论哪种方式,您都需要应用指定不应安装软件的新配置。

如果在配置期间只需要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。监控和自动应用可能会被相互对立的两个软件包资源混淆。

答案 4 :(得分:1)

也许应用“空”配置可能有用吗?

听起来好像DSC是一条单行道。应用配置后,必须继续使用DSC来管理该服务器。 将LCM设置为ApplyOnly不是最好的主意,因为您可能希望在某个时候对该机器应用其他东西?

答案 5 :(得分:0)

我猜您必须自己实施卸载脚本配置。我认为你不能恢复你的配置。

对我而言,您似乎应该将您的配置称为“Install-SevenZip”。

顺便说一下,感谢有关如何使用脚本资源的有趣说明。

否则,您是否检查了Package资源以管理应用程序的安装?这可能更合适,即使我不知道是否可以使用此资源从互联网上下载软件包。就像你一样。