<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DP &#8211; Haikos Blog</title>
	<atom:link href="https://www.hertes.net/tag/dp/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hertes.net</link>
	<description>Blog von Haiko Hertes zu allen Themen rund um Microsoft, Cloud und Datacenter</description>
	<lastBuildDate>Wed, 02 Oct 2013 06:33:49 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>SCCM: PowerShell Skript, um fehlende Packages für Tasksequenzen ausfindig zu machen</title>
		<link>https://www.hertes.net/2013/06/sccm-powershell-skript-um-fehlende-packages-fur-tasksequenzen-ausfindig-zu-machen/</link>
					<comments>https://www.hertes.net/2013/06/sccm-powershell-skript-um-fehlende-packages-fur-tasksequenzen-ausfindig-zu-machen/#respond</comments>
		
		<dc:creator><![CDATA[Haiko]]></dc:creator>
		<pubDate>Wed, 12 Jun 2013 19:50:39 +0000</pubDate>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Configuration Manager]]></category>
		<category><![CDATA[Distribution Point]]></category>
		<category><![CDATA[DP]]></category>
		<category><![CDATA[SCCM]]></category>
		<category><![CDATA[Tasksequenz]]></category>
		<guid isPermaLink="false">http://www.hertes.net/?p=1693</guid>

					<description><![CDATA[In unserer produktiven SCCM-Umgebung werden insbesondere die größeren Content-Pakete per Prestaging und USB-Datenträger verteilt. Dabei kann es vorkommen, das man den Überblick, welches Paket noch auf welchem Distribution-Point fehlt bzw. für welche Tasksequenzen wo noch Pakete fehlen, verloren geht. Um dieses Problem zu lösen, habe ich ein PowerShell-Skript geschrieben. Dazu habe ich mich von Inhalten von Jason Scheffelmaer inspirieren lassen. Um das Skript nutzen zu können, benötigt man die SCCM.psm1 von Michael Niehaus. Das Skript wird ohne Parameter aufgerufen und fragt alle notwendigen Werte bei der Abarbeitung ab. Wichtig ist, dass die x86-Variante der PowerShell verwendet wird. Im Skript selber muss&#8230;]]></description>
										<content:encoded><![CDATA[<p>In unserer produktiven SCCM-Umgebung werden insbesondere die größeren Content-Pakete per Prestaging und USB-Datenträger verteilt. Dabei kann es vorkommen, das man den Überblick, welches Paket noch auf welchem Distribution-Point fehlt bzw. für welche Tasksequenzen wo noch Pakete fehlen, verloren geht.</p>
<p>Um dieses Problem zu lösen, habe ich ein PowerShell-Skript geschrieben. Dazu habe ich mich von Inhalten von Jason Scheffelmaer inspirieren lassen. Um das Skript nutzen zu können, benötigt man die <a href="http://blogs.technet.com/b/mniehaus/archive/2010/04/07/make-sure-a-configmgr-task-sequence-has-all-the-packages-it-needs.aspx" target="_blank">SCCM.psm1 von Michael Niehaus</a>.</p>
<p><span style="font-size: 13px; line-height: 19px;">Das Skript wird ohne Parameter aufgerufen und fragt alle notwendigen Werte bei der Abarbeitung ab. Wichtig ist, dass die x86-Variante der PowerShell verwendet wird. Im Skript selber muss noch der Pfad zur SCCM.psm1 angepasst werden.</span></p>
<p><span style="font-size: 13px; line-height: 19px;"> </span></p>
<pre lang="PowerShell" line="1"># Get-SCCMMissingTSPackages.ps1

# Author: Haiko Hertes
# Parts of the Script are taken from CheckTSPrompt.ps1 from Jason Scheffelmaer
# Needs sccm.psm1 from Michael Niehaus, tested with Version 1.5

# ------------- DISCLAIMER -------------------------------------------------
# This script code is provided as is with no guarantee or waranty concerning
# the usability or impact on systems and may be used, distributed, and
# modified in any way provided the parties agree and acknowledge the 
# Microsoft or Microsoft Partners have neither accountabilty or 
# responsibility for results produced by use of this script.
#
# Microsoft will not provide any support through any means.
# ------------- DISCLAIMER -------------------------------------------------

# The CheckPackages function checks each task sequence, finding all the packages
# that it references.  It then checks each appropriate DP to make sure that the
# needed packages are available on on those DPs.

function CheckPackages
{
    process
    {
        # Get the list of packages referenced by this task sequence
        $tsID = $_.PackageID
        $tsName = $_.Name

        # Setting up a Text-List of all DPs to see, which DP has all needed packages
        $DPsWithAllPackages = New-Object System.Collections.ArrayList
        foreach ($dp in $global:SelecteddpList)
        {
                $DPsWithAllPackages.Add($dp.Name)
        }

        Write-Host "###############################################################################################"
        Write-Host 'Checking the Packages for  Task Sequence $tsID ("' -NoNewLine; Write-Host $tsName -NoNewLine -ForegroundColor Yellow ; Write-Host '")'
        $tsReferences = Get-SCCMObject SMS_TaskSequenceReferencesInfo "PackageID='$tsID' and ProgramName='*'"    

        # Check each package
        Write-Verbose "Checking all packages..."
        foreach ($tsPackage in $tsReferences)
        {

            # Get a list of DPs for this package
            $tsPackageID = $tsPackage.ReferencePackageID

            Write-Verbose "Checking Package: $tspackageID"
            $tsReferenceDPs = Get-SCCMObject SMS_TaskSequenceReferenceDPs "TaskSequenceID='$tsID' and PackageID='$tsPackageID'"
            $packageNeededSomeWhere = $false
            $packageNeedingDPs = New-Object System.Collections.ArrayList

            # Check each DP to see if the package is on it
            foreach ($dp in $global:SelecteddpList)
            {
                $dpSiteCode = $dp.SiteCode
                $dpName = $dp.Name
                Write-Verbose "Checking DP $dpName"
                $found = $false
                foreach ($tsDP in $tsReferenceDPs)
                {

                    if ($tsDP.ServerNALPath -eq $dp.NALPath)
                    {
                        Write-Verbose "$tsPackageID - Package Found"
                        $found = $true
                        break
                    }
                }
                if ($found)
                {
                    New-Object PSObject -Property @{SiteCode=$dpSiteCode; PackageID=($tsPackageID); ServerName=($dp.ServerName); ShareName=($dp.ShareName); NALPath=($dp.NALPath); Result="Found"}
                }
                else
                {
                    # Check to see if this DP is a PXE Service Point, and if so mark as Not Needed.
                    if ($tsPackage.ReferencePackageType -eq 258 -or (-not $dp.NALPath.Contains("SMSPXEIMAGES$")))
                    {
                        Write-Verbose "$tsPackageID - Package Not Found"
                        $packageNeededSomehere = $true
                        $packageNeedingDPs.Add("$dpName |")
                        $DPsWithAllPackages.Remove($dp.Name)
                        New-Object PSObject -Property @{SiteCode=$dpSiteCode; PackageID=($tsPackageID); ServerName=($dp.ServerName); ShareName=($dp.ShareName); NALPath=($dp.NALPath); Result="Not Found"}
                    }
                    else
                    {
                        New-Object PSObject -Property @{SiteCode=$dpSiteCode; PackageID=($tsPackageID); ServerName=($dp.ServerName); ShareName=($dp.ShareName); NALPath=($dp.NALPath); Result="Not Needed"}
                    }
                }
            }
            If ($packageNeededSomehere -eq $true)
            {
                Write-Host "===&gt; " -NoNewLine; Write-Host "$tsPackageID" -ForegroundColor Red -NoNewline; Write-Host " is needed on: " -NoNewline; Write-Host $packageNeedingDPs
                $packageNeededSomehere = $false
            }
            else
            {
                Write-Host "===&gt; " -NoNewLine; Write-Host "$tsPackageID" -ForegroundColor Green -NoNewline; Write-Host " is found on ALL selected DPs!"
            }
        }
        Write-Host "Tasksequence " -NoNewline; Write-Host "$tspackageID" -ForegroundColor Yellow -NoNewline; Write-Host " could be used on " -NoNewLine; Write-Host "$DPsWithAllPackages" -ForegroundColor Yellow
        Write-Host "###############################################################################################"
    }
}

# ----------
# Main logic
# ----------

# Clear screen for the script
cls

# Prompt for ConfigMgr Server Name
$ConfigMgr_Server = Read-Host "Enter Hostname of SCCM-Server to connect to, [ENTER] for localhost"
If ($ConfigMgr_Server -eq ''){$ConfigMgr_Server = hostname}
Write-Verbose "$ConfigMgr_Server is selected"

# Connect to ConfigMgr
Import-Module "D:\SOURCES\SCCM.psm1" -force
Write-Host "Connecting to SCCM Server " -NoNewLine; Write-Host $ConfigMgr_Server -ForegroundColor Yellow
New-SCCMConnection -serverName $ConfigMgr_Server

# Get the list of all task sequences to choose from via a menu
Write-Host "Getting a list of all Task Sequences to select from"
Get-SCCMTaskSequencePackage | Sort-Object Name | ft Name,PackageID

# Prompt for Task Sequence to use when checking packages
$taskSequenceName = Read-Host 'Select Task Sequence (PackageID); [ENTER] to Cancel, "All" to check all Tasksequences'
If ($taskSequenceName -eq 'Cancel' -or $taskSequenceName -eq $null)
{

    Write-Host 'No Task Sequence selected or user selected "Cancel", exiting script...'
    Exit 

}
ElseIf ($taskSequenceName -eq 'All')
{
    $SelectedTS = $TaskSequences
}
Else
{
    $SelectedTS = $TaskSequences | ? {$_.Name -eq $taskSequenceName}
    $SelectedTSID = $SelectedTS.PackageID

}
$SelectedTSID = $taskSequenceName

# Get the list of all DPs to choose from via a menu
Write-Host "Getting a list of all Distribution Points to select from"
$global:dpList = Get-SCCMObject SMS_DistributionPointInfo
$DPNameList = ($global:dpList| Select-Object @{Name="Name"; Expression={$_.ServerName}}, NalPath, SiteCode, SiteName) | Sort-Object Name
($global:dpList| Select-Object @{Name="Name"; Expression={$_.ServerName}}, SiteCode, SiteName) | Sort-Object Name

# Prompt for Distribution Point to check the referenced packages against
$global:DPName = Read-Host 'Enter Name of desired Distribution Point (FQDN); [ENTER] for localhost, "All" to check all DPs'
If ($global:DPName -eq "")
{
    Write-Verbose "[ENTER] pressed, setting localhost"
    $global:DPName = ([System.Net.Dns]::GetHostByName(($env:computerName))).HostName
}

If ($global:DPName -eq 'All')
{
    Write-Verbose '"All" entered'
    $global:SelecteddpList =  $DPNameList
}
Else
{
    $global:SelecteddpList =  $DPNameList | ? {$_.Name -eq $global:DPName}
}

# Get the package status for all packages referenced 
# by the task sequence selected.
# Write-Host "Calling the CheckPackages function"
If ($taskSequenceName -eq 'All')
{
    Write-Verbose '"All" entered'
    $packageResults = Get-SCCMTaskSequencePackage | CheckPackages
}
Else
{
    Write-Verbose 'Selected DP is $SelectedTSID'
    $packageResults = Get-SCCMTaskSequencePackage -filter "PackageID='$SelectedTSID'"| CheckPackages
}</pre>
<p>&nbsp;</p>
<p><a href="https://www.hertes.net/wp-content/uploads/2013/06/sccm-ps1.png"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-1695" alt="sccm-ps1" src="https://www.hertes.net/wp-content/uploads/2013/06/sccm-ps1.png" width="997" height="583" srcset="https://www.hertes.net/wp-content/uploads/2013/06/sccm-ps1.png 997w, https://www.hertes.net/wp-content/uploads/2013/06/sccm-ps1-300x175.png 300w" sizes="(max-width: 997px) 100vw, 997px" /></a> <a href="https://www.hertes.net/wp-content/uploads/2013/06/sccm-ps2.png"><img decoding="async" class="aligncenter size-full wp-image-1696" alt="sccm-ps2" src="https://www.hertes.net/wp-content/uploads/2013/06/sccm-ps2.png" width="997" height="583" srcset="https://www.hertes.net/wp-content/uploads/2013/06/sccm-ps2.png 997w, https://www.hertes.net/wp-content/uploads/2013/06/sccm-ps2-300x175.png 300w" sizes="(max-width: 997px) 100vw, 997px" /></a></p>
<p>&nbsp;</p>
<p><em id="__mceDel"> Download-Link zum Skript:</em></p>
<p><a href="www.hertes.net/wp-content/uploads/2013/06/Get-SCCMMissingTSPackages.ps1" target="_blank">www.hertes.net/wp-content/uploads/2013/06/Get-SCCMMissingTSPackages.ps1</a></p>
<p><em>Link zur sccm.psm1:</em></p>
<p><a href="http://blogs.technet.com/b/mniehaus/archive/2010/04/07/make-sure-a-configmgr-task-sequence-has-all-the-packages-it-needs.aspx">http://blogs.technet.com/b/mniehaus/archive/2010/04/07/make-sure-a-configmgr-task-sequence-has-all-the-packages-it-needs.aspx</a></p>
<p>(Enthalten in <a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-03-32-36-07/CheckTaskSequences.zip">CheckTaskSequences.zip</a>)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hertes.net/2013/06/sccm-powershell-skript-um-fehlende-packages-fur-tasksequenzen-ausfindig-zu-machen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SCCM2012: Content-Prestaging / Vorab bereitgestellte Inhalte</title>
		<link>https://www.hertes.net/2013/03/sccm2012-content-prestaging-vorab-bereitgestellte-inhalte/</link>
					<comments>https://www.hertes.net/2013/03/sccm2012-content-prestaging-vorab-bereitgestellte-inhalte/#comments</comments>
		
		<dc:creator><![CDATA[Haiko]]></dc:creator>
		<pubDate>Sun, 24 Mar 2013 11:45:00 +0000</pubDate>
				<category><![CDATA[System Center Configuration Manager]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[DP]]></category>
		<category><![CDATA[Prestaging]]></category>
		<category><![CDATA[SCCM]]></category>
		<guid isPermaLink="false">http://www.hertes.net/?p=1647</guid>

					<description><![CDATA[Oft müssen Content-Daten &#8211; z.B. in Form von WIM-Dateien für OSD &#8211; von einem Distribution Point (DP) zu einem anderen übertragen werden. Insbesondere bei größeren Dateien kann dies länger dauern, ein Versand der Daten auf dem Postweg wäre schneller. Für diese Fälle bietet SCCM die Möglichkeit, Inhalte &#8222;vorab bereitzustellen&#8220;, sie quasi auf einem DP zu exportieren, um sie an einem anderen zu importieren. Hierbei ist zu beachten, dass einen Unterschied macht, ob man den selben Content, den man an einer Stelle exportiert hat an einer anderen importiert, oder den Content mit Hilfe des ursprünglichen (z.B. WIM-)Files neu erstellt. Beim neu&#8230;]]></description>
										<content:encoded><![CDATA[<p>Oft müssen Content-Daten &#8211; z.B. in Form von WIM-Dateien für OSD &#8211; von einem Distribution Point (DP) zu einem anderen übertragen werden. Insbesondere bei größeren Dateien kann dies länger dauern, ein Versand der Daten auf dem Postweg wäre schneller.</p>
<p>Für diese Fälle bietet SCCM die Möglichkeit, Inhalte &#8222;vorab bereitzustellen&#8220;, sie quasi auf einem DP zu exportieren, um sie an einem anderen zu importieren. Hierbei ist zu beachten, dass einen Unterschied macht, ob man den selben Content, den man an einer Stelle exportiert hat an einer anderen importiert, oder den Content mit Hilfe des ursprünglichen (z.B. WIM-)Files neu erstellt. Beim neu erstellen erhält der Content z.B. eine andere ID!</p>
<p>Die notwendigen Schritte sind die folgenden:</p>
<p><span style="text-decoration: underline;">1. Content exportieren (&#8222;Datei für vorab bereitgestellten Inhalt erstellen&#8220;)</span></p>
<p>Dazu muss via Rechtsklick auf den jeweiligen Content die Option &#8222;Datei für vorab bereitgestellten Inhalt erstellen&#8220; ausgewählt werden. Nun muss zum einen der Speicherort angegeben werden und zum zweiten der DP, von dem aus die Datei extrahiert werden soll. Am Ende hat man eine PKGX-Datei, eine gepackte Paketdatei. In dieser sind auch die Metadaten des Inhaltes enthalten. Es ist auch möglich, mehrere Content-Dateien in einem gemeinsamen PKGX-File zu exportieren.</p>
<p><a href="https://www.hertes.net/wp-content/uploads/2013/03/4.png"><img decoding="async" class="aligncenter size-full wp-image-1648" alt="4" src="https://www.hertes.net/wp-content/uploads/2013/03/4.png" width="1025" height="565" srcset="https://www.hertes.net/wp-content/uploads/2013/03/4.png 1025w, https://www.hertes.net/wp-content/uploads/2013/03/4-300x165.png 300w, https://www.hertes.net/wp-content/uploads/2013/03/4-1024x564.png 1024w" sizes="(max-width: 1025px) 100vw, 1025px" /></a></p>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;">2. Content an anderen DP verbringen</span></p>
<p>Hierzu muss die PKGX-Datei an den DP gebracht werden. Dies kann z.B. via DVD oder USB-Datenträger, aber auch per SMB-Filetransfer erfolgen.</p>
<p><span style="text-decoration: underline;">3. DP für vorab bereitgestellten Inhalt aktivieren</span></p>
<p>Bevor Daten (Content) an einem DP importiert werden können, muss dieser erst für vorab bereitgestellte Inhalte aktiviert werden. Dies geschieht in den Eigenschaften des jeweiligen DPs:</p>
<p><a href="https://www.hertes.net/wp-content/uploads/2013/03/2.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1650" alt="2" src="https://www.hertes.net/wp-content/uploads/2013/03/2.png" width="1023" height="266" srcset="https://www.hertes.net/wp-content/uploads/2013/03/2.png 1023w, https://www.hertes.net/wp-content/uploads/2013/03/2-300x78.png 300w" sizes="auto, (max-width: 1023px) 100vw, 1023px" /></a></p>
<p><a href="https://www.hertes.net/wp-content/uploads/2013/03/3.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1651" alt="3" src="https://www.hertes.net/wp-content/uploads/2013/03/3.png" width="687" height="631" srcset="https://www.hertes.net/wp-content/uploads/2013/03/3.png 687w, https://www.hertes.net/wp-content/uploads/2013/03/3-300x275.png 300w" sizes="auto, (max-width: 687px) 100vw, 687px" /></a></p>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;">4. Content importieren</span></p>
<p>Für den Import gibt es keine GUI, dies muss über Kommandozeile erfolgen. Dazu verwendet man extractcontent.exe aus dem BIN-Verzeichnis der SCCM-Installation. Mit dem Schalter /p wird das Paket angegeben, /s sorgt dafür, dass bereits vorhandener Content übersprungen wird.</p>
<p><a href="https://www.hertes.net/wp-content/uploads/2013/03/5.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1652" alt="5" src="https://www.hertes.net/wp-content/uploads/2013/03/5.png" width="677" height="286" srcset="https://www.hertes.net/wp-content/uploads/2013/03/5.png 677w, https://www.hertes.net/wp-content/uploads/2013/03/5-300x126.png 300w" sizes="auto, (max-width: 677px) 100vw, 677px" /></a></p>
<p>&nbsp;</p>
<p>Nun steht der Content am entfernten DP zur Verfügung!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hertes.net/2013/03/sccm2012-content-prestaging-vorab-bereitgestellte-inhalte/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
