-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #107 from nyanhp/restartsetting
Added CMClientSettingsComputerRestart
- Loading branch information
Showing
11 changed files
with
842 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
266 changes: 266 additions & 0 deletions
266
...DSCResources/DSC_CMClientSettingsComputerRestart/DSC_CMClientSettingsComputerRestart.psm1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,266 @@ | ||
$script:dscResourceCommonPath = Join-Path -Path $PSScriptRoot -ChildPath '..\..\Modules\DscResource.Common' | ||
$script:configMgrResourcehelper = Join-Path -Path $PSScriptRoot -ChildPath '..\..\Modules\ConfigMgrCBDsc.ResourceHelper' | ||
|
||
Import-Module -Name $script:dscResourceCommonPath | ||
Import-Module -Name $script:configMgrResourcehelper | ||
|
||
$script:localizedData = Get-LocalizedData -DefaultUICulture 'en-US' | ||
|
||
<# | ||
.SYNOPSIS | ||
This will return a hashtable of results. | ||
.PARAMETER SiteCode | ||
Specifies the site code for Configuration Manager site. | ||
.Parameter ClientSettingName | ||
Specifies which client settings policy to modify. | ||
#> | ||
function Get-TargetResource | ||
{ | ||
[CmdletBinding()] | ||
[OutputType([System.Collections.Hashtable])] | ||
param | ||
( | ||
[Parameter(Mandatory = $true)] | ||
[String] | ||
$SiteCode, | ||
|
||
[Parameter(Mandatory = $true)] | ||
[String] | ||
$ClientSettingName | ||
) | ||
|
||
Write-Verbose -Message $script:localizedData.RetrieveSettingValue | ||
Import-ConfigMgrPowerShellModule -SiteCode $SiteCode | ||
Set-Location -Path "$($SiteCode):\" | ||
|
||
$clientSetting = Get-CMClientSetting -Name $ClientSettingName | ||
|
||
if ($clientSetting) | ||
{ | ||
$type = @('Default', 'Device', 'User')[$clientSetting.Type] | ||
$settings = Get-CMClientSetting -Name $ClientSettingName -Setting ComputerRestart | ||
|
||
if ($settings) | ||
{ | ||
$countdownMins = $settings.RebootLogoffNotificationCountdownDuration | ||
$finalWindowMins = $settings.RebootLogoffNotificationFinalWindow | ||
$replaceToast = [System.Convert]::ToBoolean($settings.RebootNotificationsDialog) | ||
$noRebootEnforcement = -not [System.Convert]::ToBoolean($settings.EnforeReboot) | ||
} | ||
|
||
$status = 'Present' | ||
} | ||
else | ||
{ | ||
$status = 'Absent' | ||
} | ||
|
||
return @{ | ||
SiteCode = $SiteCode | ||
ClientSettingName = $ClientSettingName | ||
CountdownMins = $countdownMins | ||
FinalWindowMins = $finalWindowMins | ||
ReplaceToastNotificationWithDialog = $replaceToast | ||
NoRebootEnforcement = $noRebootEnforcement | ||
ClientSettingStatus = $status | ||
ClientType = $type | ||
} | ||
} | ||
|
||
<# | ||
.SYNOPSIS | ||
This will set the desired state. | ||
.PARAMETER SiteCode | ||
Specifies a site code for the Configuration Manager site. | ||
.Parameter ClientSettingName | ||
Specifies which client settings policy to modify. | ||
.PARAMETER CountdownMins | ||
Specifies countdown, in minutes, for restart to take place. | ||
.PARAMETER FinalWindowMins | ||
Specifies the time window a restart has to take place in. | ||
.PARAMETER ReplaceToastNotificationWithDialog | ||
Specifies if toast notifications are replaced with dialog windows. | ||
.PARAMETER NoRebootEnforcement | ||
Specifies if reboots are not enforced. | ||
#> | ||
function Set-TargetResource | ||
{ | ||
[CmdletBinding()] | ||
param | ||
( | ||
[Parameter(Mandatory = $true)] | ||
[String] | ||
$SiteCode, | ||
|
||
[Parameter(Mandatory = $true)] | ||
[String] | ||
$ClientSettingName, | ||
|
||
[Parameter()] | ||
[ValidateRange(1, 1440)] | ||
[uint32] | ||
$CountdownMins, | ||
|
||
[Parameter()] | ||
[ValidateRange(1, 1440)] | ||
[uint32] | ||
$FinalWindowMins, | ||
|
||
[Parameter()] | ||
[bool] | ||
$ReplaceToastNotificationWithDialog, | ||
|
||
[Parameter()] | ||
[bool] | ||
$NoRebootEnforcement | ||
) | ||
|
||
Import-ConfigMgrPowerShellModule -SiteCode $SiteCode | ||
Set-Location -Path "$($SiteCode):\" | ||
$state = Get-TargetResource -SiteCode $SiteCode -ClientSettingName $ClientSettingName | ||
|
||
try | ||
{ | ||
if ($state.ClientSettingStatus -eq 'Absent') | ||
{ | ||
throw ($script:localizedData.ClientPolicySetting -f $ClientSettingName) | ||
} | ||
|
||
if ($state.ClientType -eq 'User') | ||
{ | ||
throw $script:localizedData.WrongClientType | ||
} | ||
|
||
if ($CountdownMins -le $FinalWindowMins) | ||
{ | ||
throw ($script:localizedData.CountdownLessFinalWindow -f $CountdownMins, $FinalWindowMins) | ||
} | ||
|
||
$defaultValues = @('CountdownMins', 'FinalWindowMins', 'ReplaceToastNotificationWithDialog', 'NoRebootEnforcement') | ||
|
||
foreach ($param in $PSBoundParameters.GetEnumerator()) | ||
{ | ||
if ($defaultValues -contains $param.Key) | ||
{ | ||
if ($param.Value -ne $state[$param.Key]) | ||
{ | ||
Write-Verbose -Message ($script:localizedData.SettingValue -f $param.Key, $param.Value) | ||
$buildingParams += @{ | ||
$param.Key = $param.Value | ||
} | ||
} | ||
} | ||
} | ||
|
||
if ($buildingParams) | ||
{ | ||
Set-CMClientSettingComputerRestart -Name $ClientSettingName @buildingParams | ||
} | ||
} | ||
catch | ||
{ | ||
throw $_ | ||
} | ||
finally | ||
{ | ||
Set-Location -Path "$env:temp" | ||
} | ||
} | ||
|
||
<# | ||
.SYNOPSIS | ||
This will test the desired state. | ||
.PARAMETER SiteCode | ||
Specifies a site code for the Configuration Manager site. | ||
.Parameter ClientSettingName | ||
Specifies which client settings policy to modify. | ||
.PARAMETER CountdownMins | ||
Specifies countdown, in minutes, for restart to take place. | ||
.PARAMETER FinalWindowMins | ||
Specifies the time window a restart has to take place in. | ||
.PARAMETER ReplaceToastNotificationWithDialog | ||
Specifies if toast notifications are replaced with dialog windows. | ||
.PARAMETER NoRebootEnforcement | ||
Specifies if reboots are not enforced. | ||
#> | ||
function Test-TargetResource | ||
{ | ||
[CmdletBinding()] | ||
[OutputType([System.Boolean])] | ||
param | ||
( | ||
[Parameter(Mandatory = $true)] | ||
[String] | ||
$SiteCode, | ||
|
||
[Parameter(Mandatory = $true)] | ||
[String] | ||
$ClientSettingName, | ||
|
||
[Parameter()] | ||
[ValidateRange(1, 1440)] | ||
[uint32] | ||
$CountdownMins, | ||
|
||
[Parameter()] | ||
[ValidateRange(1, 1440)] | ||
[uint32] | ||
$FinalWindowMins, | ||
|
||
[Parameter()] | ||
[bool] | ||
$ReplaceToastNotificationWithDialog, | ||
|
||
[Parameter()] | ||
[bool] | ||
$NoRebootEnforcement | ||
) | ||
|
||
Import-ConfigMgrPowerShellModule -SiteCode $SiteCode | ||
Set-Location -Path "$($SiteCode):\" | ||
$state = Get-TargetResource -SiteCode $SiteCode -ClientSettingName $ClientSettingName | ||
$result = $true | ||
|
||
if ($state.ClientSettingStatus -eq 'Absent') | ||
{ | ||
Write-Warning -Message ($script:localizedData.ClientPolicySetting -f $ClientSettingName) | ||
$result = $false | ||
} | ||
elseif ($state.ClientType -eq 'User') | ||
{ | ||
Write-Warning -Message $script:localizedData.WrongClientType | ||
$result = $false | ||
} | ||
else | ||
{ | ||
$defaultValues = @('CountdownMins', 'FinalWindowMins', 'ReplaceToastNotificationWithDialog', 'NoRebootEnforcement') | ||
|
||
$testParams = @{ | ||
CurrentValues = $state | ||
DesiredValues = $PSBoundParameters | ||
ValuesToCheck = $defaultValues | ||
} | ||
|
||
$result = Test-DscParameterState @testParams -TurnOffTypeChecking -Verbose | ||
} | ||
|
||
Write-Verbose -Message ($script:localizedData.TestState -f $result) | ||
Set-Location -Path "$env:temp" | ||
return $result | ||
} | ||
|
||
Export-ModuleMember -Function *-TargetResource |
12 changes: 12 additions & 0 deletions
12
...ources/DSC_CMClientSettingsComputerRestart/DSC_CMClientSettingsComputerRestart.schema.mof
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
[ClassVersion("1.0.0"), FriendlyName("CMClientSettingsComputerRestart")] | ||
class DSC_CMClientSettingsComputerRestart : OMI_BaseResource | ||
{ | ||
[Key, Description("Specifies the SiteCode for the Configuration Manager site.")] String SiteCode; | ||
[Key, Description("Specifies which client settings policy to modify.")] String ClientSettingName; | ||
[Write, Description("Specifies countdown, in minutes, for restart to take place.")] UInt32 CountdownMins; | ||
[Write, Description("Specifies the time window a restart has to take place in.")] UInt32 FinalWindowMins; | ||
[Write, Description("Specifies if toast notifications are replaced with dialog windows.")] Boolean ReplaceToastNotificationWithDialog; | ||
[Write, Description("Specifies if reboots are not enforced.")] Boolean NoRebootEnforcement; | ||
[Read, Description("Specifies if the client settings policy exists.")] String ClientSettingStatus; | ||
[Read, Description("Specifies the type of client policy setting.")] String ClientType; | ||
}; |
8 changes: 8 additions & 0 deletions
8
...SC_CMClientSettingsComputerRestart/en-US/DSC_CMClientSettingsComputerRestart.strings.psd1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
ConvertFrom-StringData @' | ||
RetrieveSettingValue = Getting results for Configuration Manager client policy for computer agent settings. | ||
ClientPolicySetting = Client Policy setting {0} does not exist, and will need to be created prior to making client setting changes. | ||
TestState = Test-TargetResource compliance check returned: {0}. | ||
SettingValue = Setting value: {0} to {1}. | ||
WrongClientType = Client Settings for computer restart only applies to Default and Device Client settings. | ||
CountdownLessFinalWindow = Countdown {0} minutes is less or equal final window {1} minutes. | ||
'@ |
22 changes: 22 additions & 0 deletions
22
...ce/Examples/Resources/CMClientSettingsComputerRestart/CMClientSettingsComputerRestart.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<# | ||
.SYNOPSIS | ||
A DSC configuration script to modify client policy settings for computer restart settings. | ||
#> | ||
Configuration Example | ||
{ | ||
Import-DscResource -ModuleName ConfigMgrCBDsc | ||
|
||
Node localhost | ||
{ | ||
|
||
CMClientSettingsComputerRestart DeviceAgent | ||
{ | ||
SiteCode = 'Lab' | ||
ClientSettingName = 'ClientTest' | ||
NoRebootEnforcement = $true | ||
CountdownMins = 30 | ||
FinalWindowMins = 10 | ||
ReplaceToastNotificationWithDialog = $true | ||
} | ||
} | ||
} |
Oops, something went wrong.