Tagged: Client

Set ConfigMgr 2012 Working Hours with Powershell

The “working hours” defined in ConfigMgr 2012 Software Center on the client is a bit off for our environment…

Did a bit of digging and found some examples in VBScript, but I like Powershell… 🙂

Function Set-CmClientBusinessHours {
	PARAM (
		[int] $StarTime = 7,
		[int] $EndTime = 18,
		[switch] $Sunday,
		[switch] $Monday,
		[switch] $Tuesday,
		[switch] $Wednesday,
		[switch] $Thursday,
		[switch] $Friday,
		[switch] $Saturday
	)
	
	$WorkingDays += ([int]$Sunday.IsPresent    * 1)
	$WorkingDays += ([int]$Monday.IsPresent    * 2)
	$WorkingDays += ([int]$Tuesday.IsPresent   * 4)
	$WorkingDays += ([int]$Wednesday.IsPresent * 8)
	$WorkingDays += ([int]$Thursday.IsPresent  * 16)
	$WorkingDays += ([int]$Friday.IsPresent    * 32)
	$WorkingDays += ([int]$Saturday.IsPresent  * 64)

	TRY {
		$cliUX = [WmiClass]"\\.\ROOT\CCM\ClientSDK:CCM_ClientUXSettings"
		$Params = $cliUX.PSBase.GetMethodParameters("SetBusinessHours")
		$Params.StartTime = $StarTime
		$Params.EndTime = $EndTime
		$Params.WorkingDays = $WorkingDays
		$cliUX.PSBase.InvokeMethod("SetBusinessHours", $Params, $null) | Out-Null
		Write-Verbose "Business Hours set to $($WorkingDays), between $($StarTime) - $($EndTime)"
		Return $true
	}
	CATCH {
		Write-Verbose "Can't set Business Hours"
		Return $false
	}
}

And this is how you use it (setting work days Mon-Fri between 08:00 and 17:00)

Set-CmClientBusinessHours -Monday -Tuesday -Wednesday -Thursday -Friday -StarTime 8 -EndTime 17

There are a few other methods that you can use with (almost) the same code…

# First connect to ClientUX
$cliUX = [WmiClass]"\\.\ROOT\CCM\ClientSDK:CCM_ClientUXSettings"

# Get a list of all methods
$cliUX.PSBase.methods | Format-Table Name

# Get list of parameters to a method
$cliUX.PSBase.GetMethodParameters("SetSuppressComputerActivityInPresentationMode") | Get-Member
$cliUX.PSBase.GetMethodParameters("SetAutoInstallRequiredSoftwaretoNonBusinessHours") | Get-Member
$cliUX.PSBase.GetMethodParameters("SetBusinessHours") | Get-Member

Trigger SCCM-client actions

If you need to trigger some SCCM-client actions via a script, this is a easy way to do it.

This script will trigger actions with “Request & Evaluate” in the name.

Option Explicit
Dim oCpApplet, oActions, oAction

On Error Resume Next
Set oCpApplet = CreateObject("CPAPPLET.CPAppletMgr")
If Err.Number <> 0 Then
    WScript.Echo "Missing SCCM-client"
    Err.Clear
Else
    WScript.Echo "Found following actions:"
    Set oActions = oCpApplet.GetClientActions
    For Each oAction In oActions
        If Instr(lCase(oAction.Name),"request & evaluate") Then
            WScript.Echo "  " & oAction.Name & " - Starting"
            oAction.PerformAction
        Else
            WScript.Echo "  " & oAction.Name
        End If
    Next
End If

Hur vÀljer SMS-klienten distributionspunkt?

Detta Àr en stÀndigt Äterkommande frÄga som jag Àmnar ge svar pÄ i detta inlÀgg.
För det första sÄ skiljer sig metoden mycket mellan de bÄda klienttyperna legacy och advanced. Jag har valt att dela upp beskrivning efter just klienttypen, det gör det lite lÀttare att greppa funktionen.

Legacy klienten
NĂ€r denna klient fĂ„r en annonsering fĂ„r den samtidigt en lista med distributionpunkter innehĂ„llande aktuellt paket frĂ„n sin CAP (Client Access Point). Klienten vĂ€ljer sedan slumpvis ut en distributionspunkt frĂ„n listan och installerar annonserat paket frĂ„n denna. Det gĂ„r att konfigurera legacy klienten med en föredragen distributionpunkt genom att anvĂ€nda verktyget prefserv.exe. I det fall att den föredragna distributionpunkten inte innehĂ„ller det paket som annonserats eller, för tillfĂ€llet, Ă€r otillgĂ€nglig vĂ€ljer klienten slumpvis ut en annan distributionspunkt inom siten. Denna klient kan inte kĂ€nna av och vet inte vad en “protected distribution point” Ă€r. Legacy klienter kan inte accessa en protected distribution point.

Advanced klienten
Denna klient bĂ€r verkligen upp sitt namn genom att anvĂ€nda en betydligt mer avancerad metod för att vĂ€lja distributionpunkt. Vid en annonsering skickar klienten en frĂ„ga till sin management point om var innehĂ„llet i annonseringen finns. Om klienten befinner sig inom ett “boundarie” med en “protected distribution point” sĂ„ fĂ„r den endast denna distributionpunkt som svar.
Om klienten befinner sig inom ett “local roaming boundarie” för en site returneras alla tillgĂ€ngliga distributionpunkter, om de innehĂ„ller aktuellt paket. Klienten sorterar sedan denna lista efter:

1. AD-site
2. Lokalt subnÀt
3. SMS site

Om klienten befinner sig i ett boundarie med flera distributionspunkter inom t.ex. en AD-site sÄ vÀljer klienten slumpvis vilken distributionspunkt den ska ta paketet ifrÄn.

Solklart hoppas jag :-). Gör som jag och rita upp ett scenario sÄ Àr det lÀttare att skapa sig en bild av hur det funkar.

/Christer Almlöf