DSCResources/MSFT_xWEFSubscription/MSFT_xWEFSubscription.psm1
function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [parameter(Mandatory = $true)] [System.String] $SubscriptionID, [ValidateSet("Present","Absent")] [System.String] $Ensure = 'Present', [parameter(Mandatory = $true)] [ValidateSet("CollectorInitiated","SourceInitiated")] [System.String] $SubscriptionType ) if ((get-service wecsvc).Status -ne 'Running') {throw 'The xWEFSubscription resource requires that the Wecsvc service be in a running state. Set the xWEFCollectorService resource to Ensure = Present or use wecutil qc.'} $EnumSubs = wecutil es if ($EnumSubs -contains $SubscriptionID) { [xml]$GetSub = wecutil gs $SubscriptionID /format:xml } $returnValue = @{ SubscriptionID = [System.String]$GetSub.Subscription.SubscriptionId Ensure = if ($Ensure -eq 'Present' -AND $EnumSubs -contains $SubscriptionID) {[System.String]'Present'} else {$null} SubscriptionType = [System.String]$GetSub.Subscription.SubscriptionType Description = [System.String]$GetSub.Subscription.Description Enabled = [System.String]$GetSub.Subscription.Enabled DeliveryMode = [System.String]$GetSub.Subscription.Delivery.Mode MaxItems = [System.Int32]$GetSub.Subscription.Delivery.Batching.MaxItems MaxLatencyTime = [System.UInt64]$GetSub.Subscription.Delivery.Batching.MaxLatencyTime HeartBeatInterval = [System.UInt64]$GetSub.Subscription.Delivery.PushSettings.Heartbeat.Interval ReadExistingEvents = [System.String]$GetSub.Subscription.ReadExistingEvents TransportName = [System.String]$GetSub.Subscription.TransportName ContentFormat = [System.String]$GetSub.Subscription.ContentFormat Locale = [System.String]$GetSub.Subscription.Locale.Language LogFile = [System.String]$GetSub.Subscription.LogFile CredentialsType = [System.String]$GetSub.Subscription.CredentialsType AllowedSourceNonDomainComputers = [System.String[]]$GetSub.Subscription.AllowedSourceNonDomainComputers AllowedSourceDomainComputers = [System.String]$GetSub.Subscription.AllowedSourceDomainComputers Query = [System.String[]]$GetSub.Subscription.Query.'#cdata-section' } $returnValue } # Get-TargetResource -SubscriptionID TestSub -Ensure Present -SubscriptionType CollectorInitiated function Set-TargetResource { [CmdletBinding()] param ( [parameter(Mandatory = $true)] [System.String] $SubscriptionID, [ValidateSet("Present","Absent")] [System.String] $Ensure = 'Present', [parameter(Mandatory = $true)] [ValidateSet("CollectorInitiated","SourceInitiated")] [System.String] $SubscriptionType, [System.String] $Description, [ValidateSet("true","false")] [System.String] $Enabled = 'true', [ValidateSet("Push","Pull")] [System.String] $DeliveryMode = 'Push', [System.Int32] $MaxItems = 1, [System.UInt64] $MaxLatencyTime = 20000, [System.UInt64] $HeartBeatInterval = 20000, [ValidateSet("true","false")] [System.String] $ReadExistingEvents = 'false', [ValidateSet("HTTP","HTTPS")] [System.String] $TransportName = 'HTTP', [System.String] $TransportPort = '5985', [System.String] $ContentFormat = 'RenderedText', [System.String] $Locale = 'en-US', [System.String] $LogFile = 'ForwardedEvents', [ValidateSet("Default","Basic","Negotiate","Digest")] [System.String] $CredentialsType = 'Default', [System.String[]] $AllowedSourceNonDomainComputers, [System.String] $AllowedSourceDomainComputers = 'O:NSG:NSD:(A;;GA;;;DC)(A;;GA;;;NS)', [System.String[]] $Query = @('Application:*','System:*'), [System.String[]] $Address = @('source.wef.test') ) if ((get-service wecsvc).Status -ne 'Running') {throw 'The xWEFSubscription resource requires that the Wecsvc service be in a running state. Set the xWEFCollectorService resource to Ensure = Present or use wecutil qc.'} if ($Ensure -eq 'Present') { $Create = @" <?xml version="1.0" encoding="UTF-8"?> <Subscription xmlns="http://schemas.microsoft.com/2006/03/windows/events/subscription"> <SubscriptionId>$SubscriptionID</SubscriptionId> <SubscriptionType>$SubscriptionType</SubscriptionType> <Description>$Description</Description> <Enabled>$Enabled</Enabled> <Uri>http://schemas.microsoft.com/wbem/wsman/1/windows/EventLog</Uri> <ConfigurationMode>Custom</ConfigurationMode> <Delivery Mode="$DeliveryMode"> <Batching> <MaxItems>$MaxItems</MaxItems> <MaxLatencyTime>$MaxLatencyTime</MaxLatencyTime> </Batching> <PushSettings> <Heartbeat Interval="$HeartbeatInterval"/> </PushSettings> </Delivery> <Query> <![CDATA[<QueryList><Query Id="0"> "@ foreach ($q in $Query){ $h = Convert-QueryString $q $Create += @" <Select Path="$($h.Path)">$($h.Select)</Select> "@ } $Create += @" </Query></QueryList>]]> </Query> <ReadExistingEvents>$ReadExistingEvents</ReadExistingEvents> <TransportName>$TransportName</TransportName> <TransportPort>$TransportPort</TransportPort> <ContentFormat>$ContentFormat</ContentFormat> <Locale Language="$Locale"/> <LogFile>$LogFile</LogFile> <PublisherName>Microsoft-Windows-EventCollector</PublisherName> <CredentialsType>$CredentialsType</CredentialsType> "@ if ($SubscriptionType -eq 'CollectorInitiated') { $Create += @" <EventSources> "@ foreach ($a in $Address) { $Create += @" <EventSource Enabled="true"> <Address>$a</Address> </EventSource> "@ } $Create += @" </EventSources> "@ } if ($SubscriptionType -eq 'SourceInitiated') { $Create += @" <AllowedSourceNonDomainComputers>$AllowedSourceNonDomainComputers</AllowedSourceNonDomainComputers> <AllowedSourceDomainComputers>$AllowedSourceDomainComputers</AllowedSourceDomainComputers> "@ } $Create += @" </Subscription> "@ Write-Verbose "SubscriptionID: $SubscriptionID" $TempFileName = "$([system.guid]::newguid().guid).tmp" $Create | Set-Content $env:TEMP\$TempFileName $EnumSubs = wecutil es if ($EnumSubs -contains $SubscriptionID) { WecUtil ds $subscriptionid } WecUtil cs $env:TEMP\$TempFileName Remove-Item $env:TEMP\$TempFileName -Force } if ($Ensure -eq 'Absent') { $EnumSubs = wecutil es if ($EnumSubs -contains $SubscriptionID) { wecutil ds $SubscriptionID } } } # Set-TargetResource -SubscriptionID TestSub -Ensure Present -SubscriptionType CollectorInitiated function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [parameter(Mandatory = $true)] [System.String] $SubscriptionID, [ValidateSet("Present","Absent")] [System.String] $Ensure = 'Present', [parameter(Mandatory = $true)] [ValidateSet("CollectorInitiated","SourceInitiated")] [System.String] $SubscriptionType, [System.String] $Description, [ValidateSet("true","false")] [System.String] $Enabled = 'true', [ValidateSet("Push","Pull")] [System.String] $DeliveryMode = 'Push', [System.Int32] $MaxItems = 1, [System.UInt64] $MaxLatencyTime = 20000, [System.UInt64] $HeartBeatInterval = 20000, [ValidateSet("true","false")] [System.String] $ReadExistingEvents = 'false', [ValidateSet("HTTP","HTTPS")] [System.String] $TransportName = 'HTTP', [System.String] $TransportPort = '5985', [System.String] $ContentFormat = 'RenderedText', [System.String] $Locale = 'en-US', [System.String] $LogFile = 'ForwardedEvents', [ValidateSet("Default","Basic","Negotiate","Digest")] [System.String] $CredentialsType = 'Default', [System.String[]] $AllowedSourceNonDomainComputers, [System.String] $AllowedSourceDomainComputers = 'O:NSG:NSD:(A;;GA;;;DC)(A;;GA;;;NS)', [System.String[]] $Query = @('Application:*','System:*'), [System.String[]] $Address = @('source.wef.test') ) if ((get-service wecsvc).Status -ne 'Running') {throw 'The xWEFSubscription resource requires that the Wecsvc service be in a running state. Set the xWEFCollectorService resource to Ensure = Present or use wecutil qc.'} $Get = Get-TargetResource -SubscriptionID $SubscriptionID -SubscriptionType $SubscriptionType $result = [System.Boolean]$true foreach ($g in $Get.Keys) { if ($PSBoundParameters.$g) { $test = $Get.$g -eq $PSBoundParameters.$g if ($test -eq [System.Boolean]$false) {$result = [System.Boolean]$false} } } $result } # Test-TargetResource -SubscriptionID TestSub -Ensure Present -SubscriptionType CollectorInitiated function Convert-QueryString { param ( [parameter(Mandatory = $true)] [string[]] $string ) return @{Path=$($string.split(':')[0]);Select=$($string.split(':')[1])} } Export-ModuleMember -Function *-TargetResource |