I spent quite some time scripting SCCM using Powershell – I plan to write some blog post about what I have done, because it is probably most complex scripted solution I ever wrote, but for now, I would like to share one trick with you.
When you script SCCM, you do it through WMI classes. SCCM classes are however not stored in default namespace – therefore whenever you want to access SCCM, you need code that looks similar to below:
Get-WmiObject –ComputerName “ServerX” –NameSpace “Root\SMS\Site_<YouSite> –Class …
Which means that for every script you should accept at least arguments –ComputerName and –SiteCode, which can be pretty annoying to type over and over again. Therefore I use following trick to get sitecode automatically:
# Specify one of SCCM servers and Site code is returned automatically
Function Global:SCCM\Get-Site([string]$ComputerName = $(Throw "Required parameter -ComputerName was not specified in SCCM\Get-Site function")) {
get-WMIObject -ComputerName $ComputerName -Namespace "root\SMS" -Class "SMS_ProviderLocation" | foreach-object{
if ($_.ProviderForLocalSite -eq $true){$SiteCode=$_.sitecode}
}
if ($SiteCode -eq "") {
throw ("Sitecode of ConfigMgr Site at " + $ComputerName + " could not be determined.")
} else {
Return $SiteCode
}
}
3 comments:
I'm looking to query the SCCM database to get the MAC address for a PC that I know the name of. Can I do this in powershell? have you done something similar? any help much appreciated
really useful, keep posting
I am new to PowerShell. Where should I give machine name??
Post a Comment