As I said in my last post “SCCM Content Settings Tool”, I would like to add packages and OSD in the tool, but didn’t know how to do it.
This is second time I write this pos, I was wrong in my last post, which I have deleted it.
Here is a updated post, this time should be correct.
Here are some links that what you could read:
http://2pintsoftware.com/branchcache-enable-task-sequences-sccm
http://powerschill.com/uncategorized/bitwise-operators
http://www.moyerteam.com/2013/11/determine-bits-set-configmgr-properties
Here are the examples:
#Get SiteSystem Informations
$CMModulePath = Join-Path -Path (Split-Path -Path "${Env:SMS_ADMIN_UI_PATH}" -ErrorAction Stop) -ChildPath "ConfigurationManager.psd1"
Import-Module $CMModulePath -ErrorAction Stop
$SiteCode = (get-psdrive -PSProvider CMSite).Name
$SiteServer = (get-psdrive -PSProvider CMSite).root
#Set-Location ($sitecode + ":")
Function Get-BitFlagsSet($FlagsProp, $BitFlagHashTable)
{
#Original from http://www.moyerteam.com/2013/11/determine-bits-set-configmgr-properties/
$ReturnHashTable = @{
}
$BitFlagHashTable.Keys | ForEach-Object {
if (($FlagsProp -band $BitFlagHashTable.Item($_)) -ne 0)
{
$ReturnHashTable.Add($($_), $true)
}
else
{
$ReturnHashTable.Add($($_), $false)
}
}
$ReturnHashTable
}
function Get-AdvInformation
{
#Original from http://www.moyerteam.com/2013/11/determine-bits-set-configmgr-properties/
#Modified by Sandy, 22.10.2016
Param (
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$SiteServer,
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$SiteCode,
[Parameter(Mandatory = $true)]
[string]$AdvertisementID
)
try
{
$Error.Clear()
#get an instance of the advertisement
$PkgAdvs = Get-WmiObject -computername $siteserver -ns "root\SMS\Site_$sitecode" -class SMS_Advertisement | WHERE {
$_.ProgramName -ne '*' -and $_.AdvertisementID -like $AdvertisementID
}
Write-host "Advertisement Name:" $PkgAdvs.AdvertisementName
Write-host "Advertisement Id:" $PkgAdvs.AdvertisementId
Write-host "AdvertFlags:" $PkgAdvs.AdvertFlags
Write-host "RemoteClientFlags:" $PkgAdvs.RemoteClientFlags
#hash table with bit flag definitions
$AdvertFlagsHex = @{
DONOT_FALLBACK = "0x00020000"
BranchCache = "0x00010000"
}
$RemoteClientFlagsHex = @{
DOWNLOAD_FROM_REMOTE_DISPPOINT = "0x00000040"
DONT_RUN_NO_LOCAL_DISPPOINT = "0x00000020"
}
#Get the flags set
Get-BitFlagsSet -FlagsProp $PkgAdvs.AdvertFlags -BitFlagHashTable $AdvertFlagsHex
Get-BitFlagsSet -FlagsProp $PkgAdvs.RemoteClientFlags -BitFlagHashTable $RemoteClientFlagsHex
}
catch
{
Write-Host $error[0].Exception.tostring()
}
}
function Set-AdvInformation
{
#More information check https://msdn.microsoft.com/en-gb/library/cc146108.aspx
#More information check http://2pintsoftware.com/branchcache-enable-task-sequences-sccm/
#More information check http://powerschill.com/uncategorized/bitwise-operators/
Param (
[CmdletBinding(SupportsShouldProcess = $true)]
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$SiteServer,
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$SiteCode,
[Parameter(Mandatory = $false)]
[string]$AdvertisementID,
[Parameter(Mandatory = $false)]
[bool]$DONOTFALLBACK,
[Parameter(Mandatory = $false)]
[bool]$BranchCache,
[Parameter(Mandatory = $false)]
[bool]$DOWNLOADONSLOW
)
$DONOTFALLBACKHEX = "0x00020000"
$BranchCacheHEX = "0x00010000"
$DOWNLOADFROMREMOTEDISPPOINTHEX = "0x00000040"
$DONTRUNNOLOCALDISPPOINTHEX = "0x00000020"
try
{
$Error.Clear()
#Set Download On Slow Network, base on DOWNLOAD_FROM_REMOTE_DISPPOINT and DONT_RUN_NO_LOCAL_DISPPOINT
$PkgAdvs = Get-WmiObject -computername $siteserver -ns "root\SMS\Site_$sitecode" -class SMS_Advertisement | Where-Object {
$_.ProgramName -ne '*' -and $_.AdvertisementID -like $AdvertisementID
}
$NewAdv = [wmi]$PkgAdvs.__PATH
if ($DOWNLOADONSLOW -eq $true)
{
#Set DOWNLOADFROMREMOTEDISPPOINTHEX
$NewAdv.RemoteClientFlags = $PkgAdvs.RemoteClientFlags -bor $DOWNLOADFROMREMOTEDISPPOINTHEX
$NewAdv.Put()
#
#Set DONTRUNNOLOCALDISPPOINT
#
$PkgAdvs = Get-WmiObject -computername $siteserver -ns "root\SMS\Site_$sitecode" -class SMS_Advertisement | Where-Object {
$_.ProgramName -ne '*' -and $_.AdvertisementID -like $AdvertisementID
}
$NewAdv = [wmi]$PkgAdvs.__PATH
if ($PkgAdvs.RemoteClientFlags -band $DONTRUNNOLOCALDISPPOINTHEX)
{
$NewAdv.RemoteClientFlags = $PkgAdvs.RemoteClientFlags -bxor $DONTRUNNOLOCALDISPPOINTHEX
$NewAdv.Put()
}
}
if ($DOWNLOADONSLOW -eq $false)
{
#Set DOWNLOADFROMREMOTEDISPPOINTHEX
if ($PkgAdvs.RemoteClientFlags -band $DOWNLOADFROMREMOTEDISPPOINTHEX)
{
$NewAdv.RemoteClientFlags = $PkgAdvs.RemoteClientFlags -bxor $DOWNLOADFROMREMOTEDISPPOINTHEX
$NewAdv.Put()
}
#
#Set DONTRUNNOLOCALDISPPOINT
#
$PkgAdvs = Get-WmiObject -computername $siteserver -ns "root\SMS\Site_$sitecode" -class SMS_Advertisement | Where-Object {
$_.ProgramName -ne '*' -and $_.AdvertisementID -like $AdvertisementID
}
$NewAdv = [wmi]$PkgAdvs.__PATH
$NewAdv.RemoteClientFlags = $PkgAdvs.RemoteClientFlags -bor $DONTRUNNOLOCALDISPPOINTHEX
$NewAdv.Put()
}
#
#
#Set BranchCache
#
$PkgAdvs = Get-WmiObject -computername $siteserver -ns "root\SMS\Site_$sitecode" -class SMS_Advertisement | Where-Object {
$_.ProgramName -ne '*' -and $_.AdvertisementID -like $AdvertisementID
}
$NewAdv = [wmi]$PkgAdvs.__PATH
if ($BranchCache -eq $true)
{
$NewAdv.AdvertFlags = $PkgAdvs.AdvertFlags -bor $BranchCacheHEX
$NewAdv.Put()
}
if ($BranchCache -eq $false)
{
if ($PkgAdvs.AdvertFlags -band $BranchCacheHEX)
{
$NewAdv.AdvertFlags = $PkgAdvs.AdvertFlags -bxor $BranchCacheHEX
$NewAdv.Put()
}
}
#
#
#Set Do Not Fall Back
#
$PkgAdvs = Get-WmiObject -computername $siteserver -ns "root\SMS\Site_$sitecode" -class SMS_Advertisement | Where-Object {
$_.ProgramName -ne '*' -and $_.AdvertisementID -like $AdvertisementID
}
$NewAdv = [wmi]$PkgAdvs.__PATH
if ($DONOTFALLBACK -eq $true)
{
$NewAdv.AdvertFlags = $PkgAdvs.AdvertFlags -bor $DONOTFALLBACKHEX
$NewAdv.Put()
}
if ($DONOTFALLBACK -eq $false)
{
if ($PkgAdvs.AdvertFlags -band $DONOTFALLBACKHEX)
{
$NewAdv.AdvertFlags = $PkgAdvs.AdvertFlags -bxor $DONOTFALLBACKHEX
$NewAdv.Put()
}
}
}
catch
{
Write-Host $error[0].Exception.tostring()
}
}
$AdvertisementID = "ZIT20009"
Get-AdvInformation -SiteServer $SiteServer -SiteCode $SiteCode -AdvertisementID $AdvertisementID
Set-AdvInformation -SiteServer $SiteServer -SiteCode $SiteCode -AdvertisementID $AdvertisementID -DOWNLOADONSLOW $false -BranchCache $false -DONOTFALLBACK $false
#Get SiteSystem Informations
$CMModulePath = Join-Path -Path (Split-Path -Path "${Env:SMS_ADMIN_UI_PATH}" -ErrorAction Stop) -ChildPath "ConfigurationManager.psd1"
Import-Module $CMModulePath -ErrorAction Stop
$SiteCode = (get-psdrive -PSProvider CMSite).Name
$SiteServer = (get-psdrive -PSProvider CMSite).root
#Set-Location ($sitecode + ":")
Function Get-BitFlagsSet($FlagsProp, $BitFlagHashTable)
{
#Original from http://www.moyerteam.com/2013/11/determine-bits-set-configmgr-properties/
$ReturnHashTable = @{
}
$BitFlagHashTable.Keys | ForEach-Object {
if (($FlagsProp -band $BitFlagHashTable.Item($_)) -ne 0)
{
$ReturnHashTable.Add($($_), $true)
}
else
{
$ReturnHashTable.Add($($_), $false)
}
}
$ReturnHashTable
}
function Get-PackageInformation
{
#Original from http://www.moyerteam.com/2013/11/determine-bits-set-configmgr-properties/
#Modified by Sandy, 22.10.2016
Param (
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$SiteServer,
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$SiteCode,
[Parameter(Mandatory = $true)]
[string]$PackageID
)
try
{
$Error.Clear()
#get an instance of the advertisement
$PkgInfo = Get-WmiObject -computername $siteserver -ns "root\SMS\Site_$sitecode" -class SMS_package | Where-Object {
$_.PackageID -like $PackageID
}
Write-host "Package Name:" $PkgInfo.Name
Write-host "Package Id:" $PkgInfo.PackageID
Write-host "Package Flags:" $PkgInfo.PkgFlags
#hash table with bit flag definitions
$PERSISTCONNECTIONHex = @{
PERSISTCONNECTION = "0x02000000"
}
#Get the flags set
Get-BitFlagsSet -FlagsProp $PkgInfo.PkgFlags -BitFlagHashTable $PERSISTCONNECTIONHex
}
catch
{
Write-Host $error[0].Exception.tostring()
}
}
function Set-PackagePersistContent
{
#More information check https://msdn.microsoft.com/en-gb/library/cc146108.aspx
#More information check http://2pintsoftware.com/branchcache-enable-task-sequences-sccm/
#More information check http://powerschill.com/uncategorized/bitwise-operators/
Param (
[CmdletBinding(SupportsShouldProcess = $true)]
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$SiteServer,
[parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$SiteCode,
[Parameter(Mandatory = $false)]
[string]$PackageID,
[Parameter(Mandatory = $false)]
[bool]$PERSISTCONNECTION
)
$PERSISTCONNECTIONHEX = "0x02000000"
try
{
$Error.Clear()
#Set PERSISTCONNECTIONHEX
#
$PkgInfo = Get-WmiObject -computername $siteserver -ns "root\SMS\Site_$sitecode" -class SMS_package | Where-Object {
$_.PackageID -like $PackageID
}
$NewPkg = [wmi]$PkgInfo.__PATH
if ($PERSISTCONNECTION -eq $true)
{
$NewPkg.PkgFlags = $NewPkg.PkgFlags -bor $PERSISTCONNECTIONHEX
$NewPkg.Put()
}
if ($PERSISTCONNECTION -eq $false)
{
if ($PkgInfo.PkgFlags -band $PERSISTCONNECTIONHEX)
{
$NewPkg.PkgFlags = $NewPkg.PkgFlags -bxor $PERSISTCONNECTIONHEX
$NewPkg.Put()
}
}
}
catch
{
Write-Host $error[0].Exception.tostring()
}
}
$PackageID = "ZIT00013"
Get-PackageInformation -SiteServer $SiteServer -SiteCode $SiteCode -PackageID $PackageID
Set-PackagePersistContent -SiteServer $SiteServer -SiteCode $SiteCode -PackageID $PackageID -PERSISTCONNECTION $false
You can download these scripts in here: Set-AdvInformation.ps1 and Set-PackagePersistContent.ps1
PS. Content Setting Tool is updated, added packages, please download again from TechNet. Click Here