How To: Initiate the “Validate” Action on all DPs for a Package in ConfigMgr 2012

ConfigMgr 2012 has a feature that allows you to validate content of a distribution point on a schedule, which works great for normal business. However, if you encounter an issue on a package and need to validate content immediately for each DP, it does require a bit of effort, as you have to go to the object in question, view the properties, then on the Content Locations tab, select a DP and click “Validate” – rinse and repeat–you must do this for each DP  to validate content, as described in the documentation. This post will describe how to enable a right-click option on any content in the Monitoring tab of the admin console.

validatecontent_2

You can download the .zip file and follow the directions in the included ‘info.txt’ file for a fast deployment to your admin console. You can review additional details below.

First you must create the proper r-click context menu. Copy the following .xml, save it as “ValidateContent.xml”, and copy it to C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\14214306-59f0-46cf-b453-a649f2a249e1\ValidateContent.xml. (Adjust the path as appropriate to your ConfigMgr Admin Console installation path).

<ActionDescription DisplayName="Validate Content on All DPs" MnemonicDisplayName="Validate Content on All DPs" Description = "Validate Content on All DPs" RibbonDisplayType="TextAndSmallImage">
<ShowOn>
<string>ContextMenu</string>
<string>DefaultHomeTab</string>
</ShowOn>
<Executable>
<FilePath>PowerShell.exe</FilePath>
-ExecutionPolicy RemoteSigned -File C:\PowerShell\CM12RClickTools\ValidatePackage.ps1 "##SUB:__Server##" "##SUB:__Namespace##" "##SUB:PackageID##"
</Executable>
</ActionDescription>

Notice in the .xml we specify the -ExeuctionPolicy RemoteSigned parameter. Best practice would be to sign your scripts, but if that’s not something you can manage easily, you can use the parameter as shown to modify the execution policy for the specific instance you’re launching, instead of changing the execution policy for all script execution. Next, copy the PowerShell code below, and save it to C:\PowerShell\CM12RClickTools\ValidatePackage.ps1 (although it’s named ValidatePackage, it does work for all content–Application, OS Image, Package, etc).

#capturing arguments:
$SiteServer = $args[0]
$SiteNamespace = $args[1]
$SiteCode = ($args[1]).Substring(14)
$PackageID = $args[2]

"{0} {1} {2} {3}" -f $SiteServer, $SiteNamespace, $SiteCode, $PackageID

$myFilter = "PackageID='$PackageID'"

$dps = gwmi sms_distributionpoint -namespace $SiteNamespace -ComputerName $SiteServer -filter $myFilter

if (($dps | measure-object).Count -ge 1) {
$dps | % {
"Initiating 'Validate Content' on {0}..." -f $_.ServerNALPath
if ($env:Computername -eq $SiteServer) {  #if running directly on the site server, omit the -computername argument

invoke-cimmethod -ClassName sms_distributionPoint -namespace $SiteNamespace -methodname "VerifyPackage" -arguments @{ PackageID=$_.PackageID; Nalpath=$_.ServerNALPath}
}
else {
invoke-cimmethod -ClassName sms_distributionPoint -namespace $SiteNamespace -ComputerName $SiteServer -methodname "VerifyPackage" -arguments @{ PackageID=$_.PackageID; Nalpath=$_.ServerNALPath}
}
}
"Validation initiated - Review Content Status for more information."
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

}
else {
"0 DPs found with this package. Content must be distributed in order to validate."
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

}

Now re-launch your ConfigMgr Admin console to use the new r-click->Validate Content on All DPs feature. As you can see from the code, this scritpt uses WMI, as SP1 does not contain cmdlets to perform this action. We use the Get-WMIobject (gwmi) cmdlet for the SMS_DistributionPoint class, filtered to only receive DPs for the desired PackageID. We then execute the VerifyPackage method for each DP.

**Important note: As of ConfigMgr 2012 SP1, only content in the content library (single instance store) will be validated. There is currently no ability to verify content on a package share (e.g. \\mydp\smspkgd$\CAS00023\).

For more information about Content Validation:

Happy Scripting!

Greg
ramseyg@hotmail.com

How To: Send Content to DP Group from Monitoring Node in ConfigMgr 2012 SP1

This post will demonstrate how to create a right-click action on the Monitoring->Distribution Status->Content Status tab to send content to a DP group. Sometimes when troubleshooting an issue, I realize that the content was sent to one DP for testing, and then promoted to production. The out-of-box experience requires you navigate back to the object (package, software update, application, etc) and then send content to DPs. This right-click tool will save you several clicks.

sendtodpgroup

After selecting to “Send to DP Group”, you will see a PowerShell window with a prompt to choose the desired DP Group.

sendtodpgroup-2

Of course, you could create multiple right-click items with hard coded DP Groups and actions, but for this post, we’ll use the dynamic selector shown above.

You can download the .zip file and follow the directions in the included ‘info.txt’ file for a fast deployment to your admin console. You can review additional details below.

First you must create the proper r-click context menu. Copy the following .xml, save it as “SendToDPGroup.xml”, and copy it to C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\14214306-59f0-46cf-b453-a649f2a249e1\SendToDPGroup.xml. (Adjust the path as appropriate to your ConfigMgr Admin Console installation path).

<ActionDescription DisplayName="Send to DP Group" MnemonicDisplayName="Send to DP Group" Description = "Send package to a DP group." RibbonDisplayType="TextAndSmallImage">
<ShowOn>
<string>ContextMenu</string>
<string>DefaultHomeTab</string>
</ShowOn>
<Executable>
<FilePath>PowerShell.exe</FilePath>
-ExecutionPolicy RemoteSigned -File C:\PowerShell\CM12RClickTools\SendToDPGroup.ps1 "##SUB:__Server##" "##SUB:__Namespace##" "##SUB:PackageID##" "##SUB:ObjectTypeID##" "##SUB:SoftwareName##"
</Executable>
</ActionDescription>

Notice in the .xml we specify the -ExeuctionPolicy RemoteSigned parameter. Best practice would be to sign your scripts, but if that’s not something you can manage easily, you can use the parameter as shown to modify the execution policy for the specific instance you’re launching, instead of changing the execution policy for all script execution. Next, copy the PowerShell code below, and save it to C:\PowerShell\CM12RClickTools\SendToDPGroup.ps1

#capturing arguments:
$SiteServer = $args[0]
$SiteNamespace = $args[1]
$SiteCode = ($args[1]).Substring(14)
$PackageID = $args[2]
$objectTypeID = $args[3]
$SoftwareName = $args[4]
$SiteDrive = $sitecode + ":"

"{0} {1} {2} {3} {4} {5}" -f $SiteServer, $SiteNamespace, $SiteCode, $PackageID, $objectTypeID, $SoftwareName

#Connect to PowerShell Provider:
$ModulePath = (($env:SMS_ADMIN_UI_PATH).Substring(0,$env:SMS_ADMIN_UI_PATH.Length-5)) + '\ConfigurationManager.psd1'
"Connecting to the Provider..."
import-module $modulePath -force
if ((get-psdrive $siteCode -erroraction SilentlyContinue | measure).Count -ne 1) {
new-psdrive -Name $siteCode -PSProvider "AdminUI.PS.Provider\CMSite" -Root $SiteServer
}
cd $siteDrive

"Gathering DP Group Names..."
$intcounter = 1
#Create a hashtable
$DPgroups = @{0 = "Name"}
$DPgroups.Remove(0)
Get-CMDistributionPointGroup | select Name | sort Name | % {
$DPgroups += @{$intcounter = $_.Name}
$intcounter++
}

#Choose the DP group
$dpgroups.GetEnumerator() | Sort-Object name
$DPgroup = read-host "Select a DP group, by number and press [enter]"
$DPGroupName = $DPgroups.get_item([int]$DPgroup)

switch ($objectTypeID)
{
#ObjectTypeIDs from SMS_ObjectContentInfo WMI Class
2 {Start-CMContentDistribution -PackageID $PackageID -DistributionPointGroupName $DPGroupName}
14 {Start-CMContentDistribution -OperatingSystemInstallerID $PackageID -DistributionPointGroupName $DPGroupName}
18 {Start-CMContentDistribution -OperatingSystemImageID $PackageID -DistributionPointGroupName $DPGroupName}
19 {Start-CMContentDistribution -BootImageID $PackageID -DistributionPointGroupName $DPGroupName}
21 {"SMS_DeviceSettingPackage - Nothing to distribute here"}
23 {Start-CMContentDistribution -DriverPackageID $PackageID -DistributionPointGroupName $DPGroupName}
24 {Start-CMContentDistribution -DeploymentPackageID $PackageID -DistributionPointGroupName $DPGroupName}
31 {Start-CMContentDistribution -ApplicationName $SoftwareName -DistributionPointGroupName $DPGroupName}
}

"DP Group Targeted distributed-Use the Monitoring node to monitor DP status."

Write-Host "Complete. Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Now re-launch your ConfigMgr Admin console to use the new r-click->Send to DP Group feature. As you can see from the code, we use Get-CMDistributionPointGroup to obtain all DP groups, and then create a hash table to allow us to display a simple selector. We then use Start-CMContentDistribution to send the content to the desired DP Group. Notice the required argument is based on the object type (package, application, updates deployment package, etc.), so we use a simple switch statement to determine the appropriate parameters to run.

Happy Scripting!

Greg
ramseyg@hotmail.com

How To: Promote an Application Simulation to a Required Deployment in ConfigMgr 2012 SP1

A simulated deployment is a great way to validate detection rules and deployment types prior to deploying an application. In my opinion, there’s one small task that’s missing - the ability to promote a simulation to production.

This post will demonstrate how to create a right-click action on the Monitoring->Deployments tab to promote a simulation to a required deployment.

promotesimulation

Selecting the action “Promote Simulation to Production” will launch PowerShell and display the simulation information (numbertargeted, numbersuccess, numbererrors, etc):

promotesimulation-2

You can also see that by default, the script is configured to create a deadline for 8:00 PM of the date in which the script is run. Be sure to modify the script to fit your needs (as well as avoid surprises).

You can download the .zip file and follow the directions in the included ‘info.txt’ file for a fast deployment to your admin console. You can view additional details below.

First you must create the proper r-click context menu. Copy the following .xml, save it as “PromoteSIMToProd.xml”, and copy it to C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\d1621955-48ad-4bba-9c85-95f74c0c6538\PromoteSIMtoProd.xml. (Adjust the path as appropriate to your ConfigMgr Admin Console installation path).

<ActionDescription DisplayName="Promote Simulation to Production" MnemonicDisplayName="Promote Simulation to Production" Description = "Removes Simulation and Creates Mandatory Deployment based on Simulation Config" RibbonDisplayType="TextAndSmallImage">
<ShowOn>
<string>ContextMenu</string>
<string>DefaultHomeTab</string>
</ShowOn>
<Executable>
<FilePath>PowerShell.exe</FilePath>
-ExecutionPolicy RemoteSigned -File C:\PowerShell\CM12RClickTools\PromoteSIMToProd.ps1 "##SUB:DeploymentID##" "##SUB:__Server##" "##SUB:__Namespace##" "##SUB:CollectionID##"
</Executable>
</ActionDescription>

Notice in the .xml that we specify the -ExeuctionPolicy RemoteSigned parameter. Best practice would be to sign your scripts, but if that’s not something you can manage easily, you can use the parameter as shown to modify the execution policy for the specific instance you’re launching, instead of changing the execution policy for all script execution. Next, copy the PowerShell code below, and save it to C:\PowerShell\CM12RClickTools\PromoteSIMToProd.ps1

#capturing arguments:
$DeploymentID = $args[0]
$SiteServer = $args[1]
$SiteNamespace = $args[2]
$SiteCode = ($args[2]).Substring(14)
$CollectionID = $args[3]
$SiteDrive = $sitecode + ":"

#"{0}, {1}, {2}, {3}, {4}, {5}" -f $DeploymentID, $SiteServer, $SiteNamespace, $CollectionID, $Sitecode, $siteDrive

#setting a hard avail time and deadline of 20:00 on the same day the script is run.
##$availDate = read-host "Enter deadline date (e.g., 12/02/1973)"
#$availableTime = read-host "Enter deadline Time (e.g., 18:00 for 6:00pm)"
$availDate = (get-date).toshortdatestring()
$availtime = "20:00"  # if you want to configure for current time, (use get-date -format H:mm)
$deadlineDate = (get-date).toshortdatestring() #to specify a time in the future, just enter a date string like "12/02/2023" (with quotes)
$deadlineTime = "20:00"

"Querying Simulation Information..."
#Connect to PowerShell Provider:
$ModulePath = $Env:SMS_ADMIN_UI_PATH.Replace(„\bin\i386“,“\bin\ConfigurationManager.psd1“)

import-module $modulePath -force
if ((get-psdrive $siteCode -erroraction SilentlyContinue | measure).Count -ne 1) {
new-psdrive -Name $siteCode -PSProvider "AdminUI.PS.Provider\CMSite" -Root $SiteServer
}
cd $siteDrive

#"{0},{1}" -f $Coll.name.tostring(), $Coll.membercount.Tostring()

"Get Simulation Deployment Info"
$simDeploy = get-cmdeployment -deploymentid $DeploymentID
if ($simDeploy.DeploymentIntent -ne 3) {
"`nOnly Simulations can be Promoted to active deployments!`n"
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
break
}
$simDeploy

#Get Collection info, so we can show potential number of systems impacted
#    (for some reason, get-cmdevicecollection wasn't dispalying membercount consistently through script)
$Filter = "CollectionID='$CollectionID'"
$Coll = gwmi sms_collection -Namespace $SiteNamespace -ComputerName $SiteServer -filter $filter

#Display info to admin before proceeding.
"`nAvailable: {0}, {1}" -f $availdate, $availtime
"Deadline: {0}, {1}" -f $deadlineDate, $deadlineTime
"Collection: {0}" -f $Coll.Name
"Total Collection members: {0}" -f $Coll.membercount

#Prompt user to verify available and deadline times, and to confirm required deployment
$x = read-host ("Press [CTRL+C] to exit, or Press any key to create the required deployment ...")

"Promoting Simulation to Production..."

"Removing Simulation..."
remove-cmdeployment -ApplicationName $SimDeploy.SoftwareName -DeploymentID $simDeploy.DeploymentID -force
"Creating new Application Deployment"
Start-CMApplicationDeployment -CollectionName $simDeploy.CollectionName -Name $SimDeploy.SoftwareName  -AvaliableDate $availDate -AvaliableTime $availTime -Comment "Simulation Promoted to Production by $env:Username" -DeadlineDate $deadlineDate -DeadlineTime $deadlineTime -DeployAction Install -DeployPurpose Required -EnableMomAlert $True -PreDeploy $True -RaiseMomAlertsOnFailure $True -UserNotification DisplaySoftwareCenterOnly

Write-Host "Complete. Press any key to continue ..."

$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Now re-launch your ConfigMgr Admin console to use the new r-click->Promote Simulation to Production feature. As you can see from the code, we use Get-CMDeployment to obtain the details of the simulation – and we verify it’s a simulation by DeploymentIntent=3. We then perform a WMI query to get information on the targeted collection, so that we can show the admin the total collection member count. After prompting the admin to continue, we simply call Remove-CMDeployment to remove the simulation, and then use the information previously queried and call Start-CMApplicationDeployment to deploy the application. Include additional parameters for Start-CMApplicationDeployment to standardize the deployments for your environment. For example, you could add -RaiseMomAlertsOnFailure $True -OverrideServiceWindow $True to the command line.

So as you can see, this could be a huge opportunity to ensure a consistent, automated process for application deployment.

Happy Scripting!

Greg
ramseyg@hotmail.com

How to: Add a “Delete Deployment” Action to Right-Click Actions in ConfigMgr 2012

Many times I find myself looking at Monitoring->Deployments in the ConfigMgr 2012 admin console, and find deployments that should be removed. The “out of the box” process to remove deployments is to browse to the object being deployed (Package, Application, Setting, TS, etc.), select the deployment, and then delete. This process requires a few more clicks than I would like to do, so I created a right-click tool that will allow you to delete the deployment from the Monitoring tab.

Download R-Click_DeleteDeployment.zip

deletedeployment
You can download the .zip file and follow the directions in the included ‘info.txt’ file for a fast deployment to your admin console. You can view additional details below.

First you must create the proper r-click context menus. Copy the following .xml, save it as “DeleteDeployment.xml”, and copy it to the following locations (create subfolders as necessary):

  • C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\e6a632fa-a43f-432f-b081-8fb0b7065f37\DeleteDeployment.xml
  • C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\d1621955-48ad-4bba-9c85-95f74c0c6538\DeleteDeployment.xml
  • C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\93218e21-485a-4e2b-9f23-77c76145e214\DeleteDeployment.xml

(Adjust the path as appropriate to your ConfigMgr Admin Console installation path).

<ActionDescription DisplayName="Delete Deployment" MnemonicDisplayName="Delete Deployment" Description = "Deletes Deployment" RibbonDisplayType="TextAndSmallImage"></pre>
<ShowOn>
 <string>ContextMenu</string>
 <string>DefaultHomeTab</string>
 </ShowOn>
 <Executable>
 <FilePath>PowerShell.exe</FilePath>
 <Parameters>-ExecutionPolicy RemoteSigned -File C:\PowerShell\CM12RClickTools\DeleteDeployment.ps1 "##SUB:DeploymentID##" "##SUB:__Server##" "##SUB:__Namespace##" "##SUB:CollectionID##" </Parameters>
 </Executable>
 </ActionDescription>

Notice in the .xml that we specify the -ExeuctionPolicy RemoteSigned parameter. Best practice would be to sign your scripts, but if that’s not something you can manage easily, you can use the parameter as shown to modify the execution policy for the specific instance you’re launching, instead of changing the execution policy for all script execution. Next, copy the PowerShell code below, and save it to C:\PowerShell\CM12RClickTools\DeleteDeployment.ps1


#use this script to delete Deployments from the monitoring node.
#capturing arguments:
$DeploymentID = $args[0]
$SiteServer = $args[1]
$SiteNamespace = $args[2]
$SiteCode = ($args[2]).Substring(14)
$CollectionID = $args[3]
$SiteDrive = $sitecode + ":"
"Deleting Deployment..."

#Connect to PowerShell Provider:
$ModulePath = (($env:SMS_ADMIN_UI_PATH).Substring(0,$env:SMS_ADMIN_UI_PATH.Length-5)) + '\ConfigurationManager.psd1'

import-module $modulePath -force
if ((get-psdrive $siteCode -erroraction SilentlyContinue | measure).Count -ne 1) {
new-psdrive -Name $siteCode -PSProvider "AdminUI.PS.Provider\CMSite" -Root $SiteServer
}
cd $siteDrive

"Get Deployment Info..."
$Deploy = get-cmdeployment -deploymentid $DeploymentID
$Deploy

"Removing Deployment..."
Switch ($deploy.FeatureType) {
1 {
#Application
remove-cmdeployment -ApplicationName $Deploy.SoftwareName -DeploymentID $Deploy.DeploymentID -force
}
2 {
#Package/Program
#Set Filter
$advertFilter = "AdvertisementID='$DeploymentID'"
#query WMI and Delete
gwmi sms_advertisement -Namespace $SiteNamespace -ComputerName $SiteServer -filter $advertFilter | % {$_.Delete()}
}
5 {
#software update
#Set Filter
$advertFilter = "AssignmentUniqueID='$DeploymentID'"
#query WMI and Delete
gwmi SMS_UpdatesAssignment -Namespace $SiteNamespace -ComputerName $SiteServer -filter $advertFilter | % {$_.Delete()}
}

6 {
#baseline
#Set Filter
$advertFilter = "AssignmentUniqueID='$DeploymentID'"
#query WMI and Delete
gwmi sms_baselineassignment -Namespace $SiteNamespace -ComputerName $SiteServer -filter $advertFilter | % {$_.Delete()}
}
7 {
#Task Sequence
#Set Filter
$advertFilter = "AdvertisementID='$DeploymentID'"
#query WMI and Delete
gwmi sms_advertisement -Namespace $SiteNamespace -ComputerName $SiteServer -filter $advertFilter | % {$_.Delete()}
}

Default {
#display feature type
write-host ("No defined method to delete " + $deploy.FeatureType)
}

}

Write-Host "Complete. Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Now re-launch your ConfigMgr Admin console to use the new r-click->Delete Deployment feature. As you can see from the code, we have to take different actions based on the object type to delete. Remove-CMDeployment only removes Application deployments, while Get-CMDeployment returns all deployments.
We use Get-CMDeployment to obtain vital information for each deployment, and then based on featuretype, perform the appropriate Delete method.

Happy Scripting!

Greg
ramseyg@hotmail.com

New Whitepaper – Configuring Microsoft® System Center Configuration Manager 2007 Inventory to utilize Dell™ OpenManage™ Client Instrumentation 8.0.1 for WakeOnLan Reporting

My teammate Mike Shuman just published a whitepaper on how to inventory WoL status on Dell Client systems with ConfigMgr 2007- download here:

Configuring Microsoft® System Center Configuration Manager 2007 Inventory to utilize Dell™ OpenManage™ Client Instrumentation 8.0.1 for WakeOnLan Reporting

 

Greg

How To: List Packages that are Configured to use a Package Share in ConfigMgr 2012

Here’s a sample script to display all packages that have the option enabled to “Copy the content in this package to a package share on distribution points.”

get-cmpackage | foreach {
  if ($_.pkgflags -eq ($_.pkgflags -bor 0x80)) {
  "pkg share bit enabled on {0}" -f $_.Packageid
  }
}

To run the script, launch PowerShell from your ConfigMgr Admin Console, or import the ConfigMgr module, and paste it into the command screen or run it as a .ps1 file.  As you can see, we run get-cmpackage to query for all packages on the ConfigMgr site. You will noticed that get-cmpackage may take some time to run in an environment with a large number of packages, because it is also querying the lazy properties for each package. Next we run a for-each loop to check the package flags. We then use the bitwise operator -bor to compare the current pkgflags value to see if the value 0×80 has already been applied, and display a message if it finds the checkbox enabled.

You can find more information about pkgflags on msdn.

For reference, here’s the setting on the package:
pkgshareproperty

Happy Scripting,

 

Greg

 

Upgrading to ConfigMgr 2012 SP1, and using Applications?

Check out my MVP colleague Kenny’s blog to learn what you need to do to get applications healthy.

Issue with “Install Software” Task Sequence Step and ConfigMgr Stand-Alone Media Build

We recently encountered an issue that has been around for a while, but no real documentation on it except for a couple posts in the TechNet Forums. Hopefully this post will save you some time.

Consider the following scenario:

  1. You are using ConfigMgr OSD, and installing additional applications by using the “Install Software” Task Sequence Step.
  2. You use a Central Administration Site (CAS) to create the stand-alone media build.

When you run the stand-alone media build process, the task sequence fails on any step that is configured to “Install a Program.” The errors appear in the smsts.log and execmgr.log, as shown below:

smsts.log:

Failed to invoke Execution Manager to Install Software for PackageID=LAB003EA
InstallSoftware Failed. hr=0x87d01004
Process completed with exit code 2278559748
Failed to run the action: Install FOO Client. The program is disabled. (Error: 87D01004; Source: CCM)
This message may also appear: Failed to invoke Execution Manager to Install Software x80008004      

smstslog-failsoftwareinstall

execmgr.log:

TS Step required to run a disabled program. Rejecting.

execmgr_failSwinstall

This is a known issue. Here are your options for work-around:

  • Create the stand-alone media at a Primary site instead of the Central Administration Site (CAS), or
  • Replace all “Install Software” TS Steps with “Run Command Line,” or
  • Add the following Run Command Line step to the task sequence after the Setup Windows  and Configuration Manager step to enable the software distribution agent before  the first Install Package step runs:
WMIC /namespace:\\root\ccm\policy\machine\requestedconfig path ccm_SoftwareDistributionClientConfig CREATE ComponentName="Enable SWDist", Enabled="true", LockSettings="TRUE", PolicySource="local", PolicyVersion="1.0", SiteSettingsKey="1" /NOINTERACTIVE

You don’t need to do all three steps-choose one.

Greg

Whitepaper – Integrating Dell iDRAC into ConfigMgr 2012

Whitepaper – Integrating Dell iDRAC into ConfigMgr 2012

I recently posted two articles about integrating the Dell iDRAC with ConfigMgr. You can download all the information in this whitepaper. Visit
http://www.dell.com/configmgr
for more Dell->ConfigMgr integration.

Additional Dell Right-Click Tools

 

Previously, I posted how to Integrate Dell iDRAC into Configmgr 2012. Here are additional Dell right-click tools that can be leveraged with ConfigMgr 2012:

  • Show System and Warranty Information – Launches a Dell Web page based on the computer service tag and displays system details as well as factory warranty information.
  • Dell and System Center – Launches the Dell and System Center home page.
  • Dell TechCenter – Launches the home page for Dell and ConfigMgr on Dell TechCenter.

DellRClick

Perform the following steps to add the additional Dell Extensions:

  1. Close any existing instances of the ConfigMgr Console.
  2. Download LaunchDelliDracV2.  Extract both .ps1 files and copy to C:\PowerShell\CM12RClickTools\
  3. Extract Dell.XML from the downloaded .zip and copy to “C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\3fd01cd1-9e01-461e-92cd-94866b8d1f39\Dell.xml,” (you may need to create the Actions and GUID folder or replace the file created previously).
  4. Copy that same Dell.xml to C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\ed9dee86-eadd-4ac8-82a1-7234a4646e62\ (you may need to create the Actions and GUID folder).
  5. Launch the ConfigMgr console.
  6. Navigate to a device, right-click and view the additional actions from the Dell menu.

PowerShell for DellLaunchSystemInfo.ps1 (Hover and select ‘View Source’ to copy code):

$ComputerName = $args[0]
$SiteServer = $args[1]
$SiteNamespace = $args[2]
"Querying {0} for {1} Service Tag" -f $SiteServer, $ComputerName
$SysInfo  = get-wmiobject -ComputerName $SiteServer -Namespace $SiteNamespace -query "select SMS_G_System_PC_BIOS.SerialNumber from  SMS_R_System inner join SMS_G_System_COMPUTER_SYSTEM on SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId inner join SMS_G_System_SYSTEM_ENCLOSURE on SMS_G_System_SYSTEM_ENCLOSURE.ResourceID = SMS_R_System.ResourceId inner join SMS_G_System_PC_BIOS on SMS_G_System_PC_BIOS.ResourceId = SMS_R_System.ResourceId where SMS_G_System_COMPUTER_SYSTEM.Name = '$ComputerName' and SMS_G_System_SYSTEM_ENCLOSURE.Manufacturer like 'Dell%'"
if (($SysInfo -ne $null) -and ($SysInfo.SerialNumber.ToString().length -ge 5)) {
"Service Tag is {0}" -f $SysInfo.SerialNumber
$strURL = "http://www.dell.com/support/troubleshooting/us/en/19/Servicetag/"+ $SysInfo.SerialNumber
start $strURL
Start-Sleep 5
}
else {
write-host  "Dell Service Tag not found. Ensure the following:" -foregroundcolor red
write-host "Healthy Client" -foregroundcolor red
write-host "Running on PowerEdge Server" -foregroundcolor red
write-host "OMSA is installed on server" -foregroundcolor red
write-host "ConfigMgr inventorying Remote Access Service Port" -foregroundcolor redstart-sleep 60
}

PowerShell for DellLaunchiDRAC.ps1 (Hover and select ‘View Source’ to copy code):

$ComputerName = $args[0]
$SiteServer = $args[1]
$SiteNamespace = $args[2]
"Querying {0} for {1} DRAC URl" -f $SiteServer, $ComputerName
$DRACInfo  = get-wmiobject -ComputerName $SiteServer -Namespace $SiteNamespace  -query "select SMS_G_System_DELL_RemoteAccessServicePort.AccessInfoIPV4 from  SMS_R_System inner join  SMS_G_System_DELL_RemoteAccessServicePort on SMS_G_System_DELL_RemoteAccessServicePort.ResourceId =  SMS_R_System.ResourceId where SMS_R_System.Name = '$Computername'"
if (($DRACInfo -ne $null) -and ($DRACInfo.AccessInfoIPv4.ToString().length -ge 5) ) {
"Address is {0}" -f $DRACInfo.AccessInfoIPV4
start $DRACInfo.AccessInfoIPV4
Start-Sleep 5
}
else {
write-host "DRAC IP not found. Ensure the following:" -foregroundcolor red
write-host "Healthy Client" -foregroundcolor red
write-host "Running on PowerEdge Server" -foregroundcolor red
write-host "OMSA is installed on server" -foregroundcolor red
write-host "ConfigMgr inventorying Remote Access Service Port" -foregroundcolor red
start-sleep 60
}

XML for updated Dell.xml file (Hover and select ‘View Source’ to copy code):

<ActionDescription Class="Group" DisplayName="Dell" MnemonicDisplayName="Dell" Description="Dell Actions">
<ShowOn>
	<string>DefaultHomeTab</string><string>ContextMenu</string>
</ShowOn>
<ActionGroups>
	<ActionDescription Class="Executable" DisplayName="Launch iDRAC" MnemonicDisplayName="Launch iDRAC" Description = "Launch iDRAC in Web Browser" RibbonDisplayType="TextAndSmallImage">
		<ShowOn>
			<string>ContextMenu</string>
			<string>DefaultHomeTab</string>
		</ShowOn>
		<Executable>
			<FilePath>PowerShell.exe</FilePath>
			<Parameters>-ExecutionPolicy RemoteSigned -File C:\PowerShell\CM12RClickTools\DellLaunchiDRAC.ps1 "##SUB:Name##" "##SUB:__Server##" "##SUB:__Namespace##"  </Parameters>
		</Executable>
	</ActionDescription>
	<ActionDescription Class="Executable" DisplayName="Show System and Warranty Information" MnemonicDisplayName="Show System and Warranty Information" Description = "Show System and Warranty Information in Web Browser" RibbonDisplayType="TextAndSmallImage">
	<ShowOn>
		<string>ContextMenu</string>
		<string>DefaultHomeTab</string>
	</ShowOn>
	<Executable>
		<FilePath>PowerShell.exe</FilePath>
		<Parameters>-ExecutionPolicy RemoteSigned -File C:\PowerShell\CM12RClickTools\DellLaunchSystemInfo.ps1 "##SUB:Name##" "##SUB:__Server##" "##SUB:__Namespace##"  </Parameters>
	</Executable>
	</ActionDescription>
	<ActionDescription Class="Executable" DisplayName="Dell and System Center" MnemonicDisplayName="Dell and System Center" Description = "Launch Dell-System Center Integration Home Page" RibbonDisplayType="TextAndSmallImage">
	<ShowOn>
		<string>ContextMenu</string>
		<string>DefaultHomeTab</string>
	</ShowOn>
	<Executable>
		<FilePath>http://www.dell.com/systemcenter</FilePath>
		<Parameters></Parameters>
	</Executable></ActionDescription>
	<ActionDescription Class="Executable" DisplayName="Dell TechCenter" MnemonicDisplayName="Dell TechCenter" Description = "Launch Dell TechCenter to ConfigMgr Home Page" RibbonDisplayType="TextAndSmallImage">
	<ShowOn>
		<string>ContextMenu</string>
		<string>DefaultHomeTab</string>
	</ShowOn>
	<Executable>
		<FilePath>http://www.dell.com/ConfigMgr</FilePath>
		<Parameters></Parameters>
	</Executable></ActionDescription>
</ActionGroups>
</ActionDescription>

Follow

Get every new post delivered to your Inbox.

Join 1,045 other followers