Aracılığıyla paylaş


DSC rapor sunucusu kullanma

Uygulama Alanı: Windows PowerShell 5.0

Önemli

Çekme Sunucusu (Windows Özelliği DSC-Hizmeti), Windows Server'ın desteklenen bir bileşenidir, ancak yeni özellikler veya yetenekler sunma planı yoktur. DSC'nin daha yeni bir sürümünün genel kullanıma sunulduğunu ve Azure İlkesi'nin konuk yapılandırması adlı bir özelliği tarafından yönetildiğini bilmenizi isteriz. Konuk yapılandırma hizmeti, DSC Uzantısı, Azure Otomasyonu State Configuration ve müşteri geri bildirimlerinden en sık istenen özellikleri birleştirir. Konuk yapılandırması, Arc özellikli sunucular aracılığıyla hibrit makine desteğini de içerir.

Bir düğümün Yerel Configuration Manager (LCM), yapılandırma durumuyla ilgili raporları daha sonra bu verileri almak için sorgulanabilen bir çekme sunucusuna gönderecek şekilde yapılandırılabilir. Düğüm bir yapılandırmayı her denetlediğinde ve uyguladığında, rapor sunucusuna bir rapor gönderir. Bu raporlar sunucudaki bir veritabanında depolanır ve raporlama web hizmeti çağrılarak alınabilir. Her rapor, hangi yapılandırmaların uygulandığı ve başarılı olup olmadıkları, kullanılan kaynaklar, oluşan hatalar ve başlangıç ve bitiş saatleri gibi bilgiler içerir.

Bir düğümün rapor gönderecek şekilde yapılandırılması

Bir düğüme, düğümün LCM yapılandırmasında bir ReportServerWeb bloğu kullanarak sunucuya rapor göndermesini söylersiniz (LCM'yi yapılandırma hakkında bilgi için bkz: Yerel Configuration Manager'ı Yapılandırma). Düğümün rapor gönderdiği sunucunun web çekme sunucusu olarak ayarlanması gerekir (SMB paylaşımına rapor gönderemezsiniz). Çekme sunucusu ayarlama hakkında bilgi için bkz: DSC web çekme sunucusu ayarlama. Rapor sunucusu, düğümün yapılandırmaları çektiği ve kaynakları aldığı hizmetle aynı olabilir veya farklı bir hizmet olabilir.

ReportServerWeb bloğunda, çekme hizmetinin URL'sini ve sunucu tarafından bilinen bir kayıt anahtarını belirtirsiniz.

Aşağıdaki yapılandırma, bir hizmetten yapılandırmaları çekmek ve farklı bir sunucudaki bir hizmete rapor göndermek için bir düğüm yapılandırır.

[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

Aşağıdaki yapılandırma, bir düğümü yapılandırmalar, kaynaklar ve raporlama için tek bir sunucu kullanacak şekilde yapılandırır.

[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

Uyarı

Çekme sunucusu ayarlarken web hizmetini istediğiniz gibi adlandırabilirsiniz, ancak ServerURL özelliğinin hizmet adıyla eşleşmesi gerekir.

Rapor verilerini alma

Çekme sunucusuna gönderilen raporlar, sunucudaki bir veritabanına girilir. Raporlar, web hizmetine yapılan çağrılar aracılığıyla kullanılabilir. Belirli bir düğüme ilişkin raporları almak için, rapor web hizmetine aşağıdaki biçimde bir HTTP isteği gönderin:

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

Raporlarını almak istediğiniz düğümün AgentId'si nerede MyNodeAgentId ? Bir düğümde Get-DscLocalConfigurationManager'ı çağırarak düğümün AgentID'sini alabilirsiniz.

Raporlar bir JSON nesneleri dizisi olarak döndürülür.

Aşağıdaki komut dosyası, çalıştırıldığı düğüme ilişkin raporları döndürür:

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
}

Rapor verilerini görüntüleme

GetReport işlevinin sonucuna bir değişken ayarlarsanız, döndürülen dizinin bir öğesindeki alanları tek tek görüntüleyebilirsiniz:

$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       : {}

Varsayılan olarak, raporlar JobID'ye göre sıralanır. En son raporu almak için, raporları azalan StartTime özelliğine göre sıralayabilir ve ardından dizinin ilk öğesini alabilirsiniz:

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

StatusData özelliğinin bir dizi özelliğe sahip bir nesne olduğuna dikkat edin. Raporlama verilerinin çoğu burada bulunur. En son rapor için StatusData özelliğinin tek tek alanlarına bakalım:

$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

Diğer şeylerin yanı sıra, bu, en son yapılandırmanın iki kaynak çağırdığını ve bunlardan birinin istenen durumda olduğunu ve birinin olmadığını gösterir. Yalnızca ResourcesNotInDesiredState özelliğinin daha okunabilir bir çıktısını alabilirsiniz:

$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

Bu örneklerin, rapor verileriyle neler yapabileceğiniz konusunda size bir fikir vermek için tasarlandığını unutmayın. PowerShell'de JSON ile çalışmaya giriş için bkz: JSON ve PowerShell ile oynama.

Ayrıca Bkz.

Yerel Configuration Manager'ı Yapılandırma

DSC web çekme sunucusu kurma

Yapılandırma adlarını kullanarak çekme istemcisi ayarlama