7

一旦应用了 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;
4

6 回答 6

8

要将 7zip 安装移出范围,您可以应用另一个未指定 7zip 的配置。配置不会“回滚”,因此,如果已安装,它将保持安装状态。如果稍后将其删除,则不会重新安装。

您也可以走手动路线,从 c:\windows\system32\configuration 中删除配置文件。您需要删除 Current.mof、backup.mof 和可能的 Previous.mof。

于 2014-08-27T02:02:02.703 回答
6

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

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

于 2015-12-03T21:27:32.173 回答
5

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

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

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

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

这就是我一直在寻找的。我知道它不会还原配置。我只是想“撤消”正在应用的配置。

谢谢!

于 2014-08-27T12:14:23.537 回答
3

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

TestScript如果安装了 7zip,配置应该包括一个返回 false 的配置,以及一个SetScript卸载软件的配置。与你现在的情况几乎相反。

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

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

如果仅在配置期间需要 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-settings 设置为ApplyOnly。监视和自动应用可能会被两个相反的包资源混淆。

于 2014-08-16T08:00:03.793 回答
1

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

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

于 2014-08-17T02:11:16.913 回答
0

我的猜测是你必须自己实现卸载脚本配置。我不认为你可以恢复你的配置。

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

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

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

于 2014-08-16T06:49:02.897 回答