Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: Windows PowerShell 5.0
Это важно
Pull Server (Windows Feature DSC-Service) является поддерживаемым компонентом Windows Server, однако предложение новых функций или возможностей не планируется. Мы хотели бы, чтобы вы знали, что более новая версия DSC теперь общедоступна, управляется функцией Политики Azure под названием гостевая конфигурация. Служба гостевой конфигурации сочетает в себе функции расширения DSC, конфигурации состояния службы автоматизации Azure и наиболее часто запрашиваемые функции из отзывов клиентов. Гостевая конфигурация также включает поддержку гибридных компьютеров через серверы с поддержкой Arc.
Локальный диспетчер конфигураций (LCM) узла может быть настроен на отправку отчетов о состоянии конфигурации на опрашивающий сервер, к которому затем можно обратиться с запросом для получения этих данных. Каждый раз, когда узел проверяет и применяет конфигурацию, он отправляет отчет на сервер отчетов. Эти отчеты хранятся в базе данных на сервере и могут быть извлечены путем вызова веб-службы отчетов. Каждый отчет содержит сведения о том, какие конфигурации были применены и были ли они успешными, использованные ресурсы, все возникшие ошибки, а также время начала и окончания.
Настройка узла для отправки отчетов
Узел должен отправлять отчеты на сервер с помощью блока ReportServerWeb в конфигурации LCM узла (сведения о настройке LCM см. в разделе Настройка локального диспетчера конфигураций). Сервер, на который узел отправляет отчеты, должен быть настроен в качестве веб-опрашивающего сервера (отправка отчетов в общую папку SMB невозможна). Сведения о настройке опрашивающего сервера см. в разделе Настройка веб-опрашивающего сервера DSC. Сервер отчетов может быть той же службой, из которой узел извлекает конфигурации и получает ресурсы, или это может быть другая служба.
В блоке ReportServerWeb указывается URL-адрес пул-сервиса и регистрационный ключ, который известен серверу.
Следующая конфигурация настраивает узел для извлечения конфигураций из одной службы и отправки отчетов в службу на другом сервере.
[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
В следующей конфигурации узел настраивается на использование одного сервера для конфигураций, ресурсов и отчетности.
[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
Замечание
При настройке опрашивающего сервера веб-службу можно назвать как угодно, но свойство ServerURL должно совпадать с именем службы.
Получение данных отчета
Отчеты, отправленные на опрашивающий сервер, заносятся в базу данных на сервере. Отчеты доступны через звонки в веб-сервис. Чтобы получить отчеты для определенного узла, отправьте HTTP-запрос к веб-сервису отчетов в следующем виде:
http://CONTOSO-REPORT:8080/PSDSCReportServer.svc/Nodes(AgentId='MyNodeAgentId')/Reports
Где MyNodeAgentId находится AgentId узла, по которому вы хотите получать отчеты. Вы можете получить идентификатор агента для узла, вызвав Get-DscLocalConfigurationManager на этом узле.
Отчеты возвращаются в виде массива объектов JSON.
Следующий скрипт возвращает отчеты для узла, на котором он выполняется:
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
}
Просмотр данных отчета
Если вы установите переменную в результат работы функции GetReport , вы можете просмотреть отдельные поля в элементе возвращаемого массива:
$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 : {}
По умолчанию отчеты сортируются по JobID. Чтобы получить самый свежий отчет, вы можете отсортировать отчеты по убыванию свойства StartTime , а затем получить первый элемент массива:
$reportsByStartTime = $reports | Sort-Object {$_."StartTime" -as [DateTime] } -Descending
$reportMostRecent = $reportsByStartTime[0]
Обратите внимание, что свойство StatusData — это объект с несколькими свойствами. Именно здесь находится большая часть отчетных данных. Давайте рассмотрим отдельные поля свойства StatusData для самого последнего отчета:
$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
Среди прочего, это показывает, что самая последняя конфигурация вызывала два ресурса, и что один из них был в нужном состоянии, а другой — нет. Вы можете получить более удобочитаемый вывод только свойства 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
Обратите внимание, что эти примеры предназначены для того, чтобы дать вам представление о том, что можно сделать с данными отчета. Общие сведения о работе с JSON в PowerShell см. в статье Работа с JSON и PowerShell.
См. также
Настройка локального диспетчера конфигураций
Настройка веб-пулл-сервера DSC
Настройка опрашивающего клиента с использованием имен конфигураций