Coder Social home page Coder Social logo

mdm-adminservice's Introduction

Modern BIOS/Driver Management with the Administration Service

This solution is used together with packages created by the Driver Automation Tool and allows you to dynamically apply drivers or BIOS packages to systems during a task sequence.

2024-05-25: Windows OS version fitlering / MSAL.PS removal

  • Windows OS version support: Added new parameter "DriverPackageWinVer" to provide additional filtering for a target Windows OS version when applying drivers. This allows you to specify, for example, if the driver package should be for "Windows 10" or "Windows 11".
    Note: The filtering logic expects the string to be in the driver package name.
  • MSAL.PS Removal : Removed dependency on MSAL.PS module when querying AdminService over CMG
  • Updated MDM-TS.zip
    Huge thanks to @FlannelNZ for his help on this release.

2021-04-27: Now works with CMG

  • Full OS support : Drivers and BIOS updates over CMG
  • WinPE support: Bare metal deployment over CMG

Invoke-GetPackageIDFromAdminService.ps1

PowerShell script developed to query the Configuration Manager Administration Service and return the most suitable Driver or BIOS package according to the values supplied.


MDM-TS.zip

This is an export of the task sequences used for Applying BIOS or Driver packages


Details / Examples

See the following blog posts for more details:

Modern Driver Management with the Administration Service

Modern BIOS Management with the Administration Service

Updated Modern Driver/BIOS Management with CMG Support

mdm-adminservice's People

Contributors

charlesnru avatar flannelnz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

flannelnz

mdm-adminservice's Issues

Packaging Invoke-GetPackageIDFromAdminService.ps1

The Invoke-GetPackageIDFromAdminService.ps1 script seem to fail when I put it inside a packages, run perfectly fine when placed directly in the TS. Are the variables passed correctly when the script is being pulled from a package?

The remote server returned an error (400) Bad request. Error in line 473. The line 473...

Thankyou for this MDM solution I really like the way it is implemented. Unfortunately I have ran into an issue that I haven't found a solution for. We upgraded our CM environment to 2211 and we are now getting this issue.

the remote server returned an error (400) Bad request. Error in line 473. The line 473 contains the following:

$Packages = Invoke-RestMethod -Method Get -Uri $WMIPackageURL -Body $Body @InvokeRestMethodCredential | Select-Object -ExpandProperty value

GetPackageID_DriverPackage.log
GetPackageID_BIOSPackage.log

Thankyou for any help you can provide.

Variable substitution issues

Running into an issue with the Invoke-GetPackageIDFromAdminService step. Basically everything after the -Password parameter is not getting its variable substituted with the value.

-ServerFQDN 'myserver.local' -UserName '[email protected]' -Password 'ItsaPassw0rd' -BypassCertCheck %BypassCertCheck%

Windows 10/11 filtering

I appreciated your reply earlier, especially since you have moved on from this sort of thing.
I was mostly trying to avoid adding releaseID/display version to all my packages, since that side is all automated with the Driver Automation Tool.
I seem to have it working with a couple of changes.

I added this parameter to the script command:
-DriverPackageWinVer '%DriverPackageWinVer%'
-ServerFQDN '%AS_HOSTFQDN%' -Username '%AS_Username%' -Password '%AS_Password%' -BypassCertCheck %BypassCertCheck% -Manufacturer '%DATManufacturer%' -Model '%DATModel%' -SystemSKU '%DATSystemSKU%' -PackageType '%PackageType%' -PilotPackages %PilotPackages% -DriverPackageOSArch '%DriverPackageOSArch%' -DriverPackageWinVer '%DriverPackageWinVer%' -DriverPackageReleaseId %DriverPackageReleaseId% -CurrentBIOSVersion '%DATCurrentBIOSVersion%' -CurrentBIOSReleaseDate '%DATCurrentBIOSReleaseDate%' -LogPath %_SMSTSLogPath%

-ExternalUrl '%AS_ExternalUrl%' -TenantId %AS_TenantId% -ClientId %AS_ClientId% -ApplicationIdUri %AS_ApplicationIdUri% -Username '%AS_Username%' -Password '%AS_Password%' -BypassCertCheck %BypassCertCheck% -Manufacturer '%DATManufacturer%' -Model '%DATModel%' -SystemSKU '%DATSystemSKU%' -PackageType '%PackageType%' -PilotPackages %PilotPackages% -DriverPackageOSArch '%DriverPackageOSArch%' -DriverPackageWinVer '%DriverPackageWinVer%' -DriverPackageReleaseId %DriverPackageReleaseId% -CurrentBIOSVersion '%DATCurrentBIOSVersion%' -CurrentBIOSReleaseDate '%DATCurrentBIOSReleaseDate%' -LogPath %_SMSTSLogPath%

Defined as:
[parameter(Mandatory = $false, HelpMessage = "For DriverPackages only: Specify the version of Windows (ex: Windows 10).", ParameterSetName = "Intranet")]
[parameter(Mandatory = $false, HelpMessage = "For DriverPackages only: Specify the version of Windows (ex: Windows 11).", ParameterSetName = "Internet")]
[string]$DriverPackageWinVer = "Unknown",

Then Filtered similar to ReleaseID:

Filter for OS version

Add-TextToCMLog $LogFile "Filtering driver packages for the specified OS type: "$DriverPackageWinVer"" $component 1
$Packages = $Packages | Where-Object{$_.Name -like "* $DriverPackageWinVer*"}
Add-TextToCMLog $LogFile "Count of packages after filter processing: $(($Packages | Measure-Object).Count)" $component 1

I then used another powershell step to populate my new variable
(Get-CimInstance win32_operatingsystem | % caption) -replace("Microsoft ","") -replace(" Enterprise","")
image

TS import fails

image

View Failure button says "Cannot validate a dependency to Package KL10003E"
Setting Action to Ignore Dependency fails at 33% with "Object reference not set to an instance of an object"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.