Używanie serwera raportów platformy DSC
Dotyczy: Windows PowerShell 5.0
Ważne
Serwer ściągania (Windows Feature DSC-Service) jest obsługiwanym składnikiem systemu Windows Server, jednak nie ma planów oferowania nowych funkcji lub możliwości. Chcielibyśmy wiedzieć, że nowsza wersja rozszerzenia DSC jest teraz ogólnie dostępna, zarządzana przez funkcję Azure Policy o nazwie konfiguracja gościa. Usługa konfiguracji gościa łączy funkcje rozszerzenia DSC, Azure Automation State Configuration i najczęściej żądanych funkcji z opinii klientów. Konfiguracja gościa obejmuje również obsługę maszyn hybrydowych za pośrednictwem serwerów z obsługą usługi Arc.
Lokalne Configuration Manager (LCM) węzła można skonfigurować do wysyłania raportów o jego stanie konfiguracji do serwera ściągania, który następnie może być odpytywane w celu pobrania tych danych. Za każdym razem, gdy węzeł sprawdza i stosuje konfigurację, wysyła raport do serwera raportów. Te raporty są przechowywane w bazie danych na serwerze i można je pobrać, wywołując usługę internetową raportowania. Każdy raport zawiera informacje, takie jak konfiguracje, które zostały zastosowane i czy zakończyły się pomyślnie, użyte zasoby, wszelkie błędy, które zostały rzucone, oraz czasy rozpoczęcia i zakończenia.
Konfigurowanie węzła do wysyłania raportów
Węzeł umożliwia wysyłanie raportów do serwera przy użyciu bloku ReportServerWeb w konfiguracji LCM węzła (aby uzyskać informacje na temat konfigurowania programu LCM, zobacz Konfigurowanie lokalnego Configuration Manager). Serwer, do którego węzeł wysyła raporty, musi być skonfigurowany jako serwer ściągania w sieci Web (nie można wysyłać raportów do udziału SMB). Aby uzyskać informacje na temat konfigurowania serwera ściągania, zobacz Konfigurowanie serwera ściągania internetowego DSC. Serwer raportów może być tą samą usługą, z której węzeł ściąga konfiguracje i pobiera zasoby lub może być inną usługą.
W bloku ReportServerWeb należy określić adres URL usługi ściągania i klucz rejestracji znany serwerowi.
Poniższa konfiguracja konfiguruje węzeł do ściągania konfiguracji z jednej usługi i wysyłania raportów do usługi na innym serwerze.
[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
Poniższa konfiguracja konfiguruje węzeł do używania pojedynczego serwera na potrzeby konfiguracji, zasobów i raportowania.
[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
Uwaga
Możesz nazwać usługę internetową dowolną, gdy konfigurujesz serwer ściągania, ale właściwość ServerURL musi być zgodna z nazwą usługi.
Pobieranie danych raportu
Raporty wysyłane do serwera ściągania są wprowadzane do bazy danych na serwerze. Raporty są dostępne za pośrednictwem wywołań usługi internetowej. Aby pobrać raporty dla określonego węzła, wyślij żądanie HTTP do usługi internetowej raportu w następującym formularzu:
http://CONTOSO-REPORT:8080/PSDSCReportServer.svc/Nodes(AgentId='MyNodeAgentId')/Reports
Gdzie MyNodeAgentId
to identyfikator AgentId węzła, dla którego chcesz uzyskać raporty. Identyfikator agenta dla węzła można uzyskać, wywołując polecenie Get-DscLocalConfigurationManager w tym węźle.
Raporty są zwracane jako tablica obiektów JSON.
Poniższy skrypt zwraca raporty dla węzła, na którym jest uruchamiany:
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
}
Wyświetlanie danych raportu
Jeśli ustawisz zmienną na wynik funkcji GetReport , możesz wyświetlić poszczególne pola w elemecie zwracanej tablicy:
$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 : {}
Domyślnie raporty są sortowane według identyfikatora jobID. Aby uzyskać najnowszy raport, możesz sortować raporty według malejącej właściwości StartTime , a następnie uzyskać pierwszy element tablicy:
$reportsByStartTime = $reports | Sort-Object {$_."StartTime" -as [DateTime] } -Descending
$reportMostRecent = $reportsByStartTime[0]
Zwróć uwagę, że właściwość StatusData jest obiektem o wielu właściwościach. W tym miejscu znajduje się wiele danych raportowania. Przyjrzyjmy się poszczególnym polam właściwości StatusData dla najnowszego raportu:
$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
Między innymi pokazuje to, że najnowsza konfiguracja nazywana dwoma zasobami i że jedna z nich była w żądanym stanie, a jedna z nich nie była. Możesz uzyskać bardziej czytelne dane wyjściowe tylko właściwości 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
Należy pamiętać, że te przykłady mają na celu określenie, co można zrobić z danymi raportu. Aby zapoznać się z wprowadzeniem do pracy z formatem JSON w programie PowerShell, zobacz Playing with JSON and PowerShell (Odtwarzanie przy użyciu formatu JSON i programu PowerShell).
Zobacz też
Konfigurowanie Configuration Manager lokalnego
Konfigurowanie internetowego serwera ściągania DSC
Konfigurowanie klienta ściągania przy użyciu nazw konfiguracji