Category: System Center

OS deployment using same MAC address for multiple clients

OS deployment using the same staging dock for multiple clients is a bit of an issue, and there are many different solutions to the problem but all have their downsides.

I did a quick search and found two probable candidates to tackle.

  1. UUID staging
    The idea is to exclude staging docks using a registry value (new in 1610) and stage using only UUID. This way the MAC address is totally irrelevant and OSD is handled using only UUID. The downside is that many Prestage tools use MAC and the UUID Guid is longer and therefore more prone to mistakes.
  2. Ethernet MAC release/Wifi renew
    This method prompts the user at the end of the task sequence to disconnect the ethernet adapter and then resumes using Wifi. The downsides here is that the task sequence no longer becomes unattended and therefore can take longer time. This also requires the use of extra filtering in task sequences and therefore extra maintenance.

With that said I came to the following solution.
On the Site create a SQL job that runs every 30/60 minutes and removes the MAC association and clears the PXE flag.

This allows users to stage their clients using the same Ethernet adapter (USB or docking station) without changing the current pxe routine/application or task sequence.
As with all staging dock solution some consideration must be taken of when the job is scheduled to run so that MAC address association is not wiped before PXE is initated.
If staging is done once a day/week the schedule can be configured to a daily job and thus the afforementioned consideration becomes a non-issue.

UUID staging
https://blogs.technet.microsoft.com/system_center_configuration_manager_operating_system_deployment_support_blog/2015/08/27/reusing-the-same-nic-for-multiple-pxe-initiated-deployments-in-system-center-configuration-manger-osd/

Ethernet MAC Release/Wifi renew
https://gallery.technet.microsoft.com/scriptcenter/Enable-multiple-SCCM-OS-861e42bb



Convert SCCM schedule to readable format

Reading SCCM Maintenance Windows is not an easy thing to do from WMI as they are stored as 16 char hex values

To get the schedule hex values simply run the below line, but the result might not be easy to understand

A server might return the following values.

Now, how do we read this? The easiest thing is to run Convert-CMSchedule but that unfortunately only works if the configuration manager console is installed.
Another way to do is to invoke a wmi method from a site server using the SMS_ScheduleMethods class.

None of these are portable, so I created my own function to decode these. The below function returns the same data as Convert-CMSchedule but is free from any module as it converts the hex to a readable format.

The function also accepts valuefrompipeline

 

The script is reverse engineered from https://msdn.microsoft.com/en-us/library/cc143505.aspx



Ninite <3 SCCM

Ninite Pro

Har man inte använt sig av Ninite hemma har man definitivt gått miste om en fantastisk produkt. I korta drag är det till för alla som ej vill besvära sig med att lägga tid på konstant paketering och uppdatering av de vanligaste applikationer. I skrivande stund supporterar Ninite Pro 112 applikationer. Allt från ramverk som .NET, Java och Flash till mediaverktyg som VLC och Spotify till avancerade utvecklingsverktyg som Eclipse.

Ninite Pro används ofta som ett stand-alone verktyg och kan installera applikationer mot klienter i en domän via det interna administrations interface Ninite Pro erbjuder. Dock kan det lätt bli mycket då varje applikation i infrastrukturen har ett eget verktyg och det är av intresse för IT avdelningar att konsolidera alla verktyg in i ett.

Ninite Pro fungerar som en dröm tillsammans med SCCM och underlättar hanteringen av applikationer samt säkerställer att de alltid håller sig uppdaterade.

SCCM integration

Något som bör tänkas igenom innan implementationen av Ninite Pro är att det har ett eget system för cachning av data vilket innebär att standard cache (och BranchCache) för SCCM inte kan användas. Detta är inget problem och en lösning tas upp i bloggposten.

Först skapas ett SCCM paket med källfiler. Källan är endast NinitePro.exe som används för all installation och konfigurering.

1
Efter detta kan ett program skapas med /updateonly samt /cachepath parametrar sättas upp. Själv föredrar jag att använda en DFS till en NinitePro cache mapp som jag delegerar rättigheter åt datorkonton att modifiera innehåll.
Ninite Pro använder sig av protokollen http/https för nedladdning av data så endast internetåtkomst krävs för installation.
2

Likvärt skapas installationspaket enkelt via /select parametrar. Full lista med applikationer finns i slutet av bloggposten.

Ninite Pro kan också användas för avinstallation av listade applikationer.
3

När alla applikationer är valda är det så enkelt som att deploya ett program till en kollektion precis som vanligt.
4

Efter detta skapas en deployment av ”NinitePro Update” programmet med ett schema. Detta avgör hur ofta applikationerna skall uppdateras. Detta kan konfigureras till ett servicefönster eller varje dag.
5

Vill organisationen istället ”certifiera” programversioner kan initial cache data laddas ner, installeras och verifieras och därefter kan Ninite använda /freeze parametern för att skapa ett paket (.exe fil) med just de versioner som används.

https://ninite.com/help/how-ninite-works/
https://ninite.com/applist/pro.html
https://ninite.com/help/features/offline.html



Automatisera skapandet av servicefönster i ConfigurationManager

När servicefönster skall skapas i Configuration Manager är det ofta en hel del klickande och det kan leda till mänskliga fel.

För att minimera risken för fel och effektivisera skapandet av servicefönster mot patch kollektioner skapade jag skriptet nedan.
Skriptet loopar igenom alla kollektioner som matchar $Collection parametern och sätter servicefönster enligt schema som specificeras.

Skriptet nedan är gjort för att köras från en Managementpoint men kan ändras genom att hårdkoda $ModulePath variabeln till ConfigurationManager modulen.