Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
183 lines (172 sloc) 6.1 KB
<#PSScriptInfo
.Description
Sets the Configuration Manager Client Logging Options
.VERSION
1.0.0
.GUID
56dfd8ea-5998-4524-9264-edfa65b4cc96
.AUTHOR
Jonathan Warnken - @MrBodean - http://www.mrbodean.net/
.COMPANYNAME
.COPYRIGHT
(C) Jonathan Warnken 2017 All rights reserved.
.TAGS
SCCM, ConfigMan, Configuration Manager, Client
.LICENSEURI
https://github.com/mrbodean/Technet/blob/master/Powershell/Set-CMClientLogOptions/License
.PROJECTURI
https://github.com/mrbodean/Technet/tree/master/Powershell/Set-CMClientLogOptions
.ICONURI
.EXTERNALMODULEDEPENDENCIES
.REQUIREDSCRIPTS
.EXTERNALSCRIPTDEPENDENCIES
.RELEASENOTES
Initial Release
#>
<#
.Synopsis
Set the Log Level for the Configuration Manager Client
.EXAMPLE
Set-CMClientLogLevel -LogLevel Normal -Computername SomeComputer1
.EXAMPLE
$parms @{
LogLevel = "Debug"
LogMaxHistory = 3
LogMaxSize = 500000
ComputerName = "SomeComputer1", "SomeComputer2","SomeComputer3"
}
Set-CMClientLogLevel @parms
.NOTES
Author
Jon Warnken
@MrBoDean
jon.warnken@gmail.com
#>
param(
# Level of Logging to set
[Parameter(ValueFromPipelineByPropertyName=$true)]
[ValidateSet("Debug","Normal","Off")]
[string]$LogLevel,
# Computer name(s) to set the logging on
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[String[]]$Computername,
# Number of log files to keep
[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$LogMaxHistory,
# Max size of log file
[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$LogMaxSize
)
<#
.Synopsis
Set the Log Level for the Configuration Manager Client
.EXAMPLE
Set-CMClientLogLevel -LogLevel Normal -Computername SomeComputer1
.EXAMPLE
$parms @{
LogLevel = "Debug"
LogMaxHistory = 3
LogMaxSize = 500000
ComputerName = "SomeComputer1", "SomeComputer2","SomeComputer3"
}
Set-CMClientLogLevel @parms
#>
function Set-CMClientLogOptions
{
[CmdletBinding()]
[OutputType([string])]
Param
(
# Level of Logging to set. Must be Debug, Normal, or Off
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[ValidateSet("Debug","Normal","Off")]
[string]$LogLevel,
# Computer name(s) to set the logging on
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[String[]]$Computername,
# Number of log files to keep
[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$LogMaxHistory,
# Max size of log file
[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$LogMaxSize
)
Begin{
Switch($Loglevel){
"Debug"{$logging = 0}
"Normal"{$logging = 1}
"Off"{$logging = 2}
}
$action = {
$loglevelvalue = $args[0]
$maxhistoryvalue = $args[1]
$maxsizevalue = $args[2]
$regpath = "Registry::HKLM\SOFTWARE\Microsoft\CCM\Logging\@GLOBAL"
$DebugLoggingPath = "Registry::HKLM\SOFTWARE\Microsoft\CCM\Logging\DebugLogging"
$loglevelname = "LogLevel"
$maxhistname = "LogMaxHistory"
$maxsizename = "LogMaxSize"
$update = $false
$CurentloglevelValue = Get-ItemPropertyValue -Path $regpath -Name $loglevelname
$CurrentmaxhistValue = Get-ItemPropertyValue -Path $regpath -Name $maxhistname
$CurrentmaxsizeValue = Get-ItemPropertyValue -Path $regpath -Name $maxsizename
If(loglevelvalue){
if($CurentloglevelValue -eq $loglevelvalue){
Write-Output "Current Log Level matched requested value. No action taken."
}else{
Set-ItemProperty -Path $regpath -name $loglevelname -value $loglevelvalue
Write-Output "Successfully set the Log Level"
$update = $true
}
Switch($loglevelvalue){
0{
if(Get-Item $DebugLoggingPath -ErrorAction SilentlyContinue){
Write-Output "DebugLogging Key found. No action taken."
}else{
New-Item -Path $DebugLoggingPath
}
}
Default{
if(Get-Item $DebugLoggingPath -ErrorAction SilentlyContinue){
Remove-Item -Path $DebugLoggingPath -Force
}else{
Write-Output "DebugLogging Key Not found. No action taken."
}
}
}
}
if($maxhistoryvalue){
if($CurrentmaxhistValue -eq $maxhistoryvalue){
Write-Output "Current Log Max matched requested value. No action taken."
}else{
Set-ItemProperty -Path $regpath -name $maxhistname -value $maxhistoryvalue
Write-Output "Successfully set the Log Max"
$update = $true
}
}
if($maxsizevalue){
if($CurrentmaxsizeValue -eq $maxsizevalue){
Write-Output "Current Log Max matched requested value. No action taken."
}else{
Set-ItemProperty -Path $regpath -name $maxsizename -value $maxsizevalue
Write-Output "Successfully set the Log Max Size"
$update = $true
}
}
if($update){
Write-Output "Update were made to the client config. The ccmexec service will be recycled to use the updates."
Stop-Service -Name CcmExec -Force
Start-Service -Name CcmExec
}
}
}
Process{
Foreach($computer in $Computername){
Invoke-Command -ComputerName $computer -ScriptBlock $action -ArgumentList $logging,$LogMaxHistory,$LogMaxSize
}
}
}
Set-CMClientLogOptions @PSBoundParameters