Použití serveru sestav DSC

Platí pro: Windows PowerShell 5.0

Důležité

Server vyžádané replikace ( Windows Feature DSC-Service) je podporovaná součást Systému Windows Server, ale neplánuje se nabízet nové funkce nebo možnosti. rádi bychom, abyste věděli, že novější verze DSC je nyní obecně dostupná, spravovaná funkcí Azure Policy pojmenovanou host configuration. Služba konfigurace hosta kombinuje funkce rozšíření DSC, Azure Automation State Configuration a nejčastěji požadované funkce podle zpětné vazby od zákazníků. Konfigurace hosta zahrnuje také podporu hybridních počítačů prostřednictvím serverů s podporou Arc.

Místní Configuration Manager (LCM) uzlu je možné nakonfigurovat tak, aby odesílala sestavy o stavu konfigurace serveru vyžádané replikace, na který se pak může dotazovat, aby tato data načetla. Pokaždé, když uzel zkontroluje a použije konfiguraci, odešle sestavu na server sestav. Tyto sestavy jsou uloženy v databázi na serveru a lze je načíst voláním webové služby generování sestav. Každá sestava obsahuje například informace o tom, jaké konfigurace byly použity a jestli byly úspěšné, použité prostředky, případné chyby, které byly vyvolány, a časy zahájení a dokončení.

Konfigurace uzlu pro odesílání sestav

Pomocí bloku ReportServerWeb v konfiguraci LCM uzlu řeknete uzlu, aby odesílal sestavy na server (informace o konfiguraci LCM najdete v tématu Konfigurace místního Configuration Manager). Server, na který uzel odesílá sestavy, musí být nastavený jako server webového vyžádání (nelze odesílat sestavy do sdílené složky SMB). Informace o nastavení serveru vyžádané replikace najdete v tématu Nastavení webového serveru vyžádané replikace DSC. Server sestav může být stejná služba, ze které uzel získává konfigurace a získává prostředky, nebo se může jednat o jinou službu.

V bloku ReportServerWeb zadáte adresu URL služby vyžádání a registrační klíč, který server zná.

Následující konfigurace nakonfiguruje uzel tak, aby naháněl konfigurace z jedné služby a odesílal sestavy do služby na jiném serveru.

[DSCLocalConfigurationManager()]
configuration ReportClientConfig
{
    Node localhost
    {
        Settings
        {
            RefreshMode          = 'Pull'
            RefreshFrequencyMins = 30
            RebootNodeIfNeeded   = $true
        }

        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL          = 'https://CONTOSO-PULL:8080/PSDSCPullServer.svc'
            RegistrationKey    = 'bbb9778f-43f2-47de-b61e-a0daff474c6d'
            ConfigurationNames = @('ClientConfig')
        }

        ReportServerWeb CONTOSO-ReportSrv
        {
            ServerURL               = 'http://CONTOSO-REPORT:8080/PSDSCPullServer.svc'
            RegistrationKey         = 'ba39daaa-96c5-4f2f-9149-f95c46460faa'
            AllowUnsecureConnection = $true
        }
    }
}

ReportClientConfig

Následující konfigurace nakonfiguruje uzel tak, aby pro konfigurace, prostředky a vytváření sestav používal jeden server.

[DSCLocalConfigurationManager()]
configuration PullClientConfig
{
    Node localhost
    {
        Settings
        {
            RefreshMode = 'Pull'
            RefreshFrequencyMins = 30
            RebootNodeIfNeeded = $true
        }

        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL = 'https://CONTOSO-PullSrv:8080/PSDSCPullServer.svc'
            RegistrationKey = 'fbc6ef09-ad98-4aad-a062-92b0e0327562'
        }



        ReportServerWeb CONTOSO-ReportSrv
        {
            ServerURL = 'https://CONTOSO-PullSrv:8080/PSDSCPullServer.svc'
        }
    }
}
PullClientConfig

Poznámka

Při nastavování serveru vyžádané replikace můžete webovou službu pojmenovat libovolně, ale vlastnost ServerURL se musí shodovat s názvem služby.

Získání dat sestavy

Sestavy odeslané na server vyžádané replikace se zadávají do databáze na serveru. Sestavy jsou k dispozici prostřednictvím volání webové služby. Pokud chcete načíst sestavy pro konkrétní uzel, odešlete do webové služby sestav požadavek HTTP v následujícím formátu:

http://CONTOSO-REPORT:8080/PSDSCReportServer.svc/Nodes(AgentId='MyNodeAgentId')/Reports

Kde MyNodeAgentId je Id agenta uzlu, pro který chcete získat sestavy. Id agenta uzlu můžete získat voláním get-DscLocalConfigurationManager na daném uzlu.

Sestavy se vrátí jako pole objektů JSON.

Následující skript vrátí sestavy pro uzel, na kterém je spuštěný:

function GetReport
{
    param
    (
        $AgentId = "$((glcm).AgentId)",
        $serviceURL = "http://CONTOSO-REPORT:8080/PSDSCPullServer.svc"
    )

    $invokeWebRequestSplat = @{
        Uri = "$serviceURL/Nodes(AgentId= '$AgentId')/Reports"
        ContentType = "application/json;odata=minimalmetadata;streaming=true;charset=utf-8"
        UseBasicParsing = $true
        Headers = @{Accept = "application/json"; ProtocolVersion = "2.0"}
        ErrorAction = 'SilentlyContinue'
        ErrorVariable = 'ev'
    }

    $request = Invoke-WebRequest @invokeWebRequestSplat
    $object = ConvertFrom-Json $request.content
    return $object.value
}

Zobrazení dat sestavy

Pokud nastavíte proměnnou na výsledek funkce GetReport , můžete zobrazit jednotlivá pole v prvku vráceného pole:

$reports = GetReport
$reports[1]
JobId                : 019dfbe5-f99f-11e5-80c6-001dd8b8065c
OperationType        : Consistency
RefreshMode          : Pull
Status               : Success
ReportFormatVersion  : 2.0
ConfigurationVersion : 2.0.0
StartTime            : 04/03/2016 06:21:43
EndTime              : 04/03/2016 06:22:04
RebootRequested      : False
Errors               : {}
StatusData           : {{"StartDate":"2016-04-03T06:21:43.7220000-07:00","IPV6Addresses":["2001:4898:d8:f2f2:852b:b255:b071:283b","fe80::852b:b255:b071
                       :283b%12","::2000:0:0:0","::1","::2000:0:0:0"],"DurationInSeconds":"21","JobID":"{019DFBE5-F99F-11E5-80C6-001DD8B8065C}","Curren
                       tChecksum":"A7797571CB9C3AF4D74C39A0FDA11DAF33273349E1182385528FFC1E47151F7F","MetaData":"Author: configAuthor; Name:
                       Sample_ArchiveFirewall; Version: 2.0.0; GenerationDate: 04/01/2016 15:23:30; GenerationHost: CONTOSO-PullSrv;","RebootRequested":"False
                       ","Status":"Success","IPV4Addresses":["10.240.179.151","127.0.0.1"],"LCMVersion":"2.0","ResourcesNotInDesiredState":[{"SourceInf
                       o":"C:\\ReportTest\\Sample_xFirewall_AddFirewallRule.ps1::23::9::xFirewall","ModuleName":"xNetworking","DurationInSeconds":"8.785",
                       "InstanceName":"Firewall","StartDate":"2016-04-03T06:21:56.4650000-07:00","ResourceName":"xFirewall","ModuleVersion":"2.7.0.0","
                       RebootRequested":"False","ResourceId":"[xFirewall]Firewall","ConfigurationName":"Sample_ArchiveFirewall","InDesiredState":"False
                       "}],"NumberOfResources":"2","Type":"Consistency","HostName":"CONTOSO-PULLCLI","ResourcesInDesiredState":[{"SourceInfo":"C:\\ReportTest\\Sample_xFirewall_AddFirewallRule.ps1::16::9::Archive","ModuleName":"PSDesiredStateConfiguration","DurationInSeconds":"1.848",
                       "InstanceName":"ArchiveExample","StartDate":"2016-04-03T06:21:56.4650000-07:00","ResourceName":"Archive","ModuleVersion":"1.1","
                       RebootRequested":"False","ResourceId":"[Archive]ArchiveExample","ConfigurationName":"Sample_ArchiveFirewall","InDesiredState":"T
                       rue"}],"MACAddresses":["00-1D-D8-B8-06-5C","00-00-00-00-00-00-00-E0"],"MetaConfiguration":{"AgentId":"52DA826D-00DE-4166-8ACB-73F2B46A7E00",
                       "ConfigurationDownloadManagers":[{"SourceInfo":"C:\\ReportTest\\LCMConfig.ps1::14::9::ConfigurationRepositoryWeb","A
                       llowUnsecureConnection":"True","ServerURL":"http://CONTOSO-PullSrv:8080/PSDSCPullServer.svc","RegistrationKey":"","ResourceId":"[Config
                       urationRepositoryWeb]CONTOSO-PullSrv","ConfigurationNames":["ClientConfig"]}],"ActionAfterReboot":"ContinueConfiguration","LCMCo
                       mpatibleVersions":["1.0","2.0"],"LCMState":"Idle","ResourceModuleManagers":[],"ReportManagers":[{"AllowUnsecureConnection":"True
                       ","RegistrationKey":"","ServerURL":"http://CONTOSO-PullSrv:8080/PSDSCPullServer.svc","ResourceId":"[ReportServerWeb]CONTOSO-PullSrv","S
                       ourceInfo":"C:\\ReportTest\\LCMConfig.ps1::24::9::ReportServerWeb"}],"StatusRetentionTimeInDays":"10","LCMVersion":"2.0","Config
                       urationMode":"ApplyAndMonitor","RefreshFrequencyMins":"30","RebootNodeIfNeeded":"True","RefreshMode":"Pull","DebugMode":["NONE"]
                       ,"LCMStateDetail":"","AllowModuleOverwrite":"False","ConfigurationModeFrequencyMins":"15"},"Locale":"en-US","Mode":"Pull"}}
AdditionalData       : {}

Ve výchozím nastavení jsou sestavy seřazené podle Id úlohy. Pokud chcete získat nejnovější sestavu, můžete sestavy seřadit pomocí sestupné vlastnosti StartTime a pak získat první prvek pole:

$reportsByStartTime = $reports | Sort-Object {$_."StartTime" -as [DateTime] } -Descending
$reportMostRecent = $reportsByStartTime[0]

Všimněte si, že Vlastnost StatusData je objekt s několika vlastnostmi. Tady je velká část dat generování sestav. Podívejme se na jednotlivá pole vlastnosti StatusData pro nejnovější sestavu:

$statusData = $reportMostRecent.StatusData | ConvertFrom-Json
$statusData
StartDate                  : 2016-04-04T11:21:41.2990000-07:00
IPV6Addresses              : {2001:4898:d8:f2f2:852b:b255:b071:283b, fe80::852b:b255:b071:283b%12, ::2000:0:0:0, ::1...}
DurationInSeconds          : 25
JobID                      : {135D230E-FA92-11E5-80C6-001DD8B8065C}
CurrentChecksum            : A7797571CB9C3AF4D74C39A0FDA11DAF33273349E1182385528FFC1E47151F7F
MetaData                   : Author: configAuthor; Name: Sample_ArchiveFirewall; Version: 2.0.0; GenerationDate: 04/01/2016 15:23:30; GenerationHost:
                             CONTOSO-PullSrv;
RebootRequested            : False
Status                     : Success
IPV4Addresses              : {10.240.179.151, 127.0.0.1}
LCMVersion                 : 2.0
ResourcesNotInDesiredState : {@{SourceInfo=C:\ReportTest\Sample_xFirewall_AddFirewallRule.ps1::23::9::xFirewall; ModuleName=xNetworking;
                             DurationInSeconds=10.725; InstanceName=Firewall; StartDate=2016-04-04T11:21:55.7200000-07:00; ResourceName=xFirewall;
                             ModuleVersion=2.7.0.0; RebootRequested=False; ResourceId=[xFirewall]Firewall; ConfigurationName=Sample_ArchiveFirewall;
                             InDesiredState=False}}
NumberOfResources          : 2
Type                       : Consistency
HostName                   : CONTOSO-PULLCLI
ResourcesInDesiredState    : {@{SourceInfo=C:\ReportTest\Sample_xFirewall_AddFirewallRule.ps1::16::9::Archive; ModuleName=PSDesiredStateConfiguration;
                             DurationInSeconds=2.672; InstanceName=ArchiveExample; StartDate=2016-04-04T11:21:55.7200000-07:00; ResourceName=Archive;
                             ModuleVersion=1.1; RebootRequested=False; ResourceId=[Archive]ArchiveExample; ConfigurationName=Sample_ArchiveFirewall;
                             InDesiredState=True}}
MACAddresses               : {00-1D-D8-B8-06-5C, 00-00-00-00-00-00-00-E0}
MetaConfiguration          : @{AgentId=52DA826D-00DE-4166-8ACB-73F2B46A7E00; ConfigurationDownloadManagers=System.Object[];
                             ActionAfterReboot=ContinueConfiguration; LCMCompatibleVersions=System.Object[]; LCMState=Idle;
                             ResourceModuleManagers=System.Object[]; ReportManagers=System.Object[]; StatusRetentionTimeInDays=10; LCMVersion=2.0;
                             ConfigurationMode=ApplyAndMonitor; RefreshFrequencyMins=30; RebootNodeIfNeeded=True; RefreshMode=Pull;
                             DebugMode=System.Object[]; LCMStateDetail=; AllowModuleOverwrite=False; ConfigurationModeFrequencyMins=15}
Locale                     : en-US
Mode                       : Pull

To mimo jiné ukazuje, že poslední konfigurace nazvala dva prostředky a že jeden z nich byl v požadovaném stavu a jeden z nich nebyl. Můžete získat čitelnější výstup pouze vlastnosti ResourcesNotInDesiredState :

$statusData.ResourcesInDesiredState
SourceInfo        : C:\ReportTest\Sample_xFirewall_AddFirewallRule.ps1::16::9::Archive
ModuleName        : PSDesiredStateConfiguration
DurationInSeconds : 2.672
InstanceName      : ArchiveExample
StartDate         : 2016-04-04T11:21:55.7200000-07:00
ResourceName      : Archive
ModuleVersion     : 1.1
RebootRequested   : False
ResourceId        : [Archive]ArchiveExample
ConfigurationName : Sample_ArchiveFirewall
InDesiredState    : True

Všimněte si, že tyto příklady vám mají poskytnout představu o tom, co můžete dělat s daty sestavy. Úvod k práci s JSON v PowerShellu najdete v tématu Hraní s JSON a PowerShellem.

Viz také

Konfigurace místního Configuration Manager

Nastavení webového serveru vyžádané replikace DSC

Použití konfiguračních názvů k nastavení načítacího klienta