Zmiany zachowania w konfiguracji żądanego stanu programu PowerShell dla konfiguracji maszyny

Przed rozpoczęciem warto zapoznać się z omówieniem konfiguracji maszyny.

Dostępny jest przewodnik wideo dotyczący tego dokumentu.

Konfiguracja maszyny używa programu PowerShell Desired State Configuration (PSDSC) w wersji 3 do przeprowadzania inspekcji i konfigurowania maszyn. Konfiguracja DSC definiuje stan, w jaki powinien znajdować się maszyna. Istnieje wiele istotnych różnic w sposobie implementacji rozszerzenia DSC w konfiguracji maszyny.

Konfiguracja maszyny używa międzyplatformowego programu PowerShell 7

Konfiguracja maszyny została zaprojektowana, dzięki czemu środowisko zarządzania systemami Windows i Linux może być spójne. W obu środowiskach systemu operacyjnego osoba mająca wiedzę DSC programu PowerShell może tworzyć i publikować konfiguracje przy użyciu umiejętności tworzenia skryptów.

Konfiguracja maszyny korzysta tylko z rozszerzenia DSC programu PowerShell w wersji 3 i nie opiera się na poprzedniej implementacji rozszerzenia DSC dla systemu Linux ani nx* dostawców zawartych w tym repozytorium.

Od wersji 1.26.33 konfiguracja maszyny działa w programie PowerShell 7.1.2 dla systemów Windows i PowerShell 7.2 w wersji zapoznawczej 6 dla systemu Linux. Począwszy od wersji 7.2, moduł PSDesiredStateConfiguration został przeniesiony z części instalacji programu PowerShell i jest zamiast tego instalowany jako moduł z Galeria programu PowerShell.

Wiele konfiguracji

Konfiguracja maszyny obsługuje przypisywanie wielu konfiguracji do tej samej maszyny. W systemie operacyjnym rozszerzenia konfiguracji maszyny nie są wymagane żadne specjalne kroki. Nie ma potrzeby konfigurowania częściowych konfiguracji.

Zależności są zarządzane na konfigurację

Gdy konfiguracja jest spakowana przy użyciu dostępnych narzędzi, wymagane zależności konfiguracji są zawarte w .zip pliku. Maszyny wyodrębniają zawartość do unikatowego folderu dla każdej konfiguracji. Agent dostarczony przez rozszerzenie konfiguracji maszyny tworzy dedykowaną sesję programu PowerShell dla każdej konfiguracji. Używa modułu $Env:PSModulePath , który ogranicza automatyczne ładowanie modułu tylko do ścieżki, w której został wyodrębniony pakiet.

Ta zmiana ma wiele korzyści:

  • Istnieje możliwość użycia różnych wersji modułów dla każdej konfiguracji na tym samym komputerze.
  • Gdy konfiguracja nie jest już potrzebna na maszynie, agent bezpiecznie usuwa cały folder, w którym wyodrębniono konfigurację. Nie musisz zarządzać współużytkowanych zależności między konfiguracjami.
  • Zarządzanie wieloma wersjami dowolnego modułu w centralnej usłudze nie jest wymagane.

Artefakty są zarządzane jako pakiety

Funkcja Azure Automation State Configuration obejmuje zarządzanie artefaktami dla modułów i skryptów konfiguracji. Po opublikowaniu obu tych elementów w usłudze można skompilować skrypt w formacie MOF. Podobnie serwer ściągania systemu Windows wymaga również zarządzania konfiguracjami i modułami w wystąpieniu usługi internetowej. Z kolei rozszerzenie DSC ma uproszczony model, w którym wszystkie artefakty są pakowane razem i przechowywane w lokalizacji dostępnej z maszyny docelowej przy użyciu żądania HTTPS. Usługa Azure Blob Storage jest popularną opcją hostowania artefaktów.

Konfiguracja maszyny używa tylko uproszczonego modelu, w którym wszystkie artefakty są pakowane razem i uzyskiwane z maszyny docelowej za pośrednictwem protokołu HTTPS. Nie ma potrzeby publikowania modułów, skryptów ani kompilowania w usłudze. Jedną ze zmian jest to, że pakiet powinien zawsze zawierać skompilowany plik MOF. Nie można dołączyć pliku skryptu do pakietu i skompilować go na maszynie docelowej.

Maksymalny rozmiar niestandardowego pakietu konfiguracji

W usłudze Azure Automation State Configuration konfiguracje DSC były ograniczone. Konfiguracja maszyny obsługuje całkowity rozmiar pakietu wynoszący 100 MB przed kompresją. Nie ma określonego limitu rozmiaru pliku MOF w pakiecie.

Tryb konfiguracji jest ustawiany w artefaktu pakietu

Podczas tworzenia pakietu konfiguracji tryb jest ustawiany przy użyciu następujących opcji:

  • Audit — Weryfikuje zgodność maszyny. Nie są wprowadzane żadne zmiany.
  • AuditandSet — Weryfikuje i koryguje stan zgodności maszyny. Zmiany są wprowadzane, jeśli maszyna nie jest zgodna.

Tryb jest ustawiany w pakiecie, a nie w lokalnej usłudze Configuration Manager , ponieważ każda konfiguracja może być stosowana w innym trybie.

Obsługa parametrów za pośrednictwem usługi Azure Resource Manager

Parametry ustawione przez tablicę właściwości configurationParameter w przypisaniach konfiguracji maszyny zastępują tekst statyczny w pliku MOF konfiguracji, gdy plik jest przechowywany na maszynie. Parametry umożliwiają dostosowywanie i operator do kontrolowania zmian z interfejsu API usługi bez konieczności uruchamiania poleceń na maszynie.

Parametry w usłudze Azure Policy, które przekazują wartości do przypisań konfiguracji maszyny, muszą być typem ciągu . Nie można przekazać tablic przez parametry, nawet jeśli zasób DSC obsługuje tablice.

Zestaw wyzwalaczy z maszyny zewnętrznej

Wyzwanie w poprzednich wersjach DSC poprawia dryf na dużą skalę bez znacznie niestandardowego kodu i poleganie na połączeniach zdalnych WinRM. Konfiguracja gościa rozwiązuje ten problem. Użytkownicy konfiguracji maszyny mają kontrolę nad korektą dryfu za pomocą korygowania na żądanie.

Sekwencja obejmuje metodę Get

Podczas inspekcji lub konfigurowania maszyny ta sama sekwencja zdarzeń jest używana zarówno dla systemów Windows, jak i Linux. Godna uwagi zmiana zachowania polega na Get tym, że metoda jest wywoływana przez usługę w celu zwrócenia szczegółów dotyczących stanu maszyny.

  1. Agent najpierw jest uruchamiany Test , aby określić, czy konfiguracja jest w prawidłowym stanie.
  2. Jeśli pakiet jest ustawiony na Auditwartość , wartość logiczna zwracana przez funkcję określa, czy stan usługi Azure Resource Manager dla przypisania gościa powinien mieć wartość Compliant lub NonCompliant.
  3. Jeśli pakiet jest ustawiony na AuditandSetwartość , wartość logiczna określa, czy skorygować maszynę, stosując konfigurację przy użyciu Set metody . Test Jeśli metoda zwróci $falsewartość , Set zostanie uruchomiona. Jeśli Test funkcja zwraca $truewartość , Set nie jest uruchamiana.
  4. Na koniec dostawca uruchamia polecenie Get , aby zwrócić bieżący stan każdego ustawienia, aby uzyskać szczegółowe informacje o tym, dlaczego maszyna nie jest zgodna i czy bieżący stan jest zgodny.

Specjalne wymagania dotyczące pobierania

Metoda DSC Get ma specjalne wymagania dotyczące konfiguracji maszyny, które nie były wymagane w przypadku rozszerzenia DSC.

  • Zwrócona tabela skrótu powinna zawierać właściwość o nazwie Reasons.
  • Właściwość Reasons musi być tablicą.
  • Każdy element w tablicy powinien być tabelą skrótów z kluczami o nazwach Code i Phrase.
  • Nie należy zwracać żadnych wartości innych niż tabela skrótów.

Właściwość Reasons jest używana przez usługę do standaryzacji sposobu prezentowania informacji o zgodności. Każdy element w obszarze Powody można traktować jako komunikat o tym, jak zasób jest lub nie jest zgodny. Właściwość jest tablicą, ponieważ zasób może nie być zgodny z więcej niż jedną przyczyną.

Właściwości Kod i Fraza są oczekiwane przez usługę. Podczas tworzenia zasobu niestandardowego ustaw tekst, który chcesz wyświetlić jako przyczynę, dla której zasób nie jest zgodny jako wartość frazy. Kod ma określone wymagania dotyczące formatowania, dzięki czemu raportowanie może wyraźnie wyświetlać informacje o zasobie używanym do przeprowadzania inspekcji. To rozwiązanie sprawia, że konfiguracja gościa jest rozszerzalna. Każde polecenie może być uruchamiane tak długo, jak można zwrócić dane wyjściowe jako wartość ciągu dla właściwości Phrase .

  • Kod (ciąg): nazwa zasobu, powtórzona, a następnie krótka nazwa bez spacji jako identyfikator z tego powodu. Te trzy wartości powinny być rozdzielane dwukropkami bez spacji.
    • Przykładem może być registry:registry:keynotpresent
  • Fraza (ciąg): tekst czytelny dla człowieka, aby wyjaśnić, dlaczego ustawienie nie jest zgodne.
    • Przykładem może być The registry key $key isn't present on the machine.
$reasons = @()
$reasons += @{
  Code   = 'Name:Name:ReasonIdentifer'
  Phrase = 'Explain why the setting is not compliant'
}
return @{
    reasons = $reasons
}

W przypadku korzystania z narzędzi wiersza polecenia w celu uzyskania informacji zwracanych w Getelememencie narzędzie może znaleźć dane wyjściowe, których nie oczekiwano. Mimo że przechwytujesz dane wyjściowe w programie PowerShell, dane wyjściowe mogły być również zapisywane w standardowym błędzie. Aby uniknąć tego problemu, rozważ przekierowanie danych wyjściowych do wartości null.

Właściwość Reasons, klasa osadzona

W zasobach opartych na skryptach (tylko system Windows) klasa Reasons znajduje się w pliku MOF schematu w następujący sposób.

[ClassVersion("1.0.0.0")]
class Reason
{
  [Read] String Phrase;
  [Read] String Code;
};

[ClassVersion("1.0.0.0"), FriendlyName("ResourceName")]
class ResourceName : OMI_BaseResource
{
  [Key, Description("Example description")] String Example;
  [Read, EmbeddedInstance("Reason")] String Reasons[];
};

W zasobach opartych na klasach (Windows i Linux) klasa Reason jest uwzględniona w module programu PowerShell w następujący sposób. W systemie Linux jest rozróżniana wielkość liter, więc C wartość in Code i P w Phrase musi być wielkich liter.

enum ensure {
  Absent
  Present
}

class Reason {
  [DscProperty()]
  [string] $Code

  [DscProperty()]
  [string] $Phrase
}

[DscResource()]
class Example {

  [DscProperty(Key)]
  [ensure] $ensure

  [DscProperty()]
  [Reason[]] $Reasons

  [Example] Get() {
    # return current current state
  }

  [void] Set() {
    # set the state
  }

  [bool] Test() {
    # check whether state is correct
  }
}

Jeśli zasób ma wymagane właściwości, te właściwości powinny być również zwracane Get równolegle z klasą Reason . Jeśli przyczyna nie jest uwzględniona, usługa zawiera zachowanie "catch-all", które porównuje wartości wejściowe z Get wartościami zwracanymi przez Getelement i udostępnia szczegółowe porównanie jako Przyczyna.

Nazwy konfiguracji

Nazwa konfiguracji niestandardowej musi być spójna wszędzie. Te elementy muszą mieć taką samą nazwę:

  • .zip Plik pakietu zawartości
  • Nazwa konfiguracji w pliku MOF
  • Nazwa przypisania konfiguracji maszyny w szablonie usługi Azure Resource Manager

Uruchamianie poleceń w programie Windows PowerShell

Uruchamianie modułów systemu Windows w programie PowerShell można osiągnąć przy użyciu poniższego wzorca w zasobach DSC. Poniższy wzorzec tymczasowo ustawia polecenie PSModulePath , aby uruchomić program Windows PowerShell zamiast programu PowerShell, aby odnaleźć wymagane moduły dostępne w programie Windows PowerShell. Ten przykład jest fragmentem kodu dostosowanym z zasobu DSC używanego w wbudowanym zasobie DSC secure Web Server .

Ten wzorzec tymczasowo ustawia ścieżkę wykonywania programu PowerShell do uruchomienia z poziomu programu Windows PowerShell i odnajduje wymagane polecenie cmdlet, które w tym przypadku to Get-WindowsFeature. Dane wyjściowe polecenia są zwracane, a następnie ustandaryzowane pod kątem wymagań dotyczących zgodności. Po wykonaniu $env:PSModulePath polecenia cmdlet zostanie przywrócona oryginalna ścieżka.

# The Get-WindowsFeature cmdlet needs to be run through Windows PowerShell
# rather than through PowerShell, which is what the Policy engine runs.
$null = Invoke-Command -ScriptBlock {
    param ([string]$FileName)

    $InitialPSModulePath   = $env:PSModulePath
    $WindowsPSFolder       = "$env:SystemRoot\System32\WindowsPowershell\v1.0"
    $WindowsPSExe          = "$WindowsPSFolder\powershell.exe"
    $WindowsPSModuleFolder = "$WindowsPSFolder\Modules"
    $GetFeatureScriptBlock = {
        param([string]$FileName)

        if (Get-Command -Name Get-WindowsFeature -ErrorAction SilentlyContinue) {
            Get-WindowsFeature -Name Web-Server |
                ConvertTo-Json |
                Out-File $FileName
        } else {
            Add-Content -Path $FileName -Value 'NotServer'
        }
    }

    try {
        # Set env variable to include Windows Powershell modules so we can find
        # the Get-WindowsFeature cmdlet.
        $env:PSModulePath = $WindowsPSModuleFolder
        # Call Windows PowerShell to get the info about the Web-Server feature
        & $WindowsPSExe -command $WindowsFeatureScriptBlock -args $FileName
    } finally {
        # Reset the env variable even if there's an error.
        $env:PSModulePath = $InitialPSModulePath
    }
}

Typowe funkcje DSC nie są dostępne podczas publicznej wersji zapoznawczej konfiguracji maszyny

W publicznej wersji zapoznawczej konfiguracja maszyny nie obsługuje określania zależności między maszynami przy użyciu WaitFor* zasobów. Nie można obserwować jednego komputera i czekać, aż inny komputer osiągnie stan przed postępem.

Obsługa ponownego rozruchu nie jest dostępna w publicznej wersji zapoznawczej konfiguracji maszyny, $global:DSCMachineStatus w tym nie jest dostępna. Konfiguracje nie mogą ponownie uruchomić węzła podczas lub na końcu konfiguracji.

Znane problemy ze zgodnością z obsługiwanymi modułami

Moduł PsDscResources w Galeria programu PowerShell i moduł PSDesiredStateConfiguration dostarczany z systemem Windows są obsługiwane przez firmę Microsoft i są powszechnie używanym zestawem zasobów dla dsc. Do czasu zaktualizowania modułu PSDscResources dla dsCv3 należy pamiętać o następujących znanych problemach ze zgodnością.

  • Nie używaj zasobów z modułu PSDesiredStateConfiguration dostarczanego z systemem Windows. Zamiast tego przejdź do pozycji PSDscResources.
  • Nie używaj WindowsFeaturezasobów , , WindowsFeatureSetWindowsOptionalFeaturei WindowsOptionalFeatureSet w usłudze PsDscResources. Istnieje znany problem podczas ładowania modułu DISM w programie PowerShell 7.1.3 w systemie Windows Server, który wymaga aktualizacji.

nx* Zasoby dla systemu Linux, które zostały uwzględnione w repozytorium DSC for Linux, zostały napisane w połączeniu języków C i Python. Ponieważ ścieżka do przodu dla rozszerzenia DSC w systemie Linux polega na użyciu programu PowerShell, istniejące nx* zasoby nie są zgodne z dsCv3. Do czasu udostępnienia nowego modułu zawierającego obsługiwane zasoby dla systemu Linux jest wymagany do tworzenia zasobów niestandardowych.

Współistnienie z wersją DSC w wersji 3 i poprzednich

Rozszerzenie DSC w wersji 3 w konfiguracji maszyny może współistnieć ze starszymi wersjami zainstalowanymi w systemach Windows i Linux. Implementacje są oddzielne. Nie ma jednak żadnego wykrywania konfliktów w wersjach DSC, więc nie próbuj zarządzać tymi samymi ustawieniami.

Następne kroki