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;
            }
        }
    }    
}

Scriptアプリケーションが見つからない場合、この構成ブロックは、リソースを使用して 7-Zip 9.20 64 ビットを適用先のシステムにインストールする MOF を生成します。

以下のコマンドを使用してこの構成を適用した後、7-Zip が不要になった場合、どのようにシステムから削除できますか?

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

6 に答える 6

3

リソースは、構成内でのみPresent(必須) または (不要)Absentにすることができます。後で構成をロールバックするには、新しい構成を適用する必要があります。DSC のスクリプト リソースは、Ensure プロパティをサポートしていないため、スクリプトを元に戻すには、新しい構成の AFAIK で変更されたスクリプト リソースを作成する必要があります。

構成には、TestScript7zip がインストールされている場合に false を返す とSetScript、ソフトウェアをアンインストールする を含める必要があります。あなたが今持っているものとはほとんど逆です。

構成を変更して、スクリプト リソースで msi ファイルをローカルにダウンロードし、Package リソースで実際にインストール (またはアンインストール)DependsOnし、download-script に設定することもできます。これは、構成に対するよりクリーンなアプローチになります。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。監視と自動適用は、互いに反対のことをしている 2 つのパッケージ リソースによって混乱する可能性があります。

于 2014-08-16T08:00:03.793 に答える
0

私の推測では、自分でアンインストール スクリプトの構成を実装する必要があります。設定を元に戻すことはできないと思います。

私には、「Install-SevenZip」のような構成を呼び出すべきだったようです。

ところで、スクリプト リソースの使用方法に関する興味深い図をありがとうございます。

それ以外の場合は、アプリケーションのインストールを管理するために Package リソースを確認しましたか? あなたと同じように、このリソースを使用してインターネットからパッケージをダウンロードできるかどうかはわかりませんが、それはより適切かもしれません。

于 2014-08-16T06:49:02.897 に答える