一旦应用了计算机,是否可以从计算机中删除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;
答案 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资源以管理应用程序的安装?这可能更合适,即使我不知道是否可以使用此资源从互联网上下载软件包。就像你一样。