2017-02-15 6 views
1

Мы пытаемся найти имя хоста сервера SCCM, которое содержит пакеты/программное обеспечение, которое может быть установлено на клиенте, запросив WMI с помощью Get-WMIObject. Другими словами, сервер (SCCMPackageServer), на котором размещается общий доступ с пакетами, когда вы просматриваете его с помощью проводника, например \\SCCMPackageServer\SWD\Packagex.Найти точку распространения SCCM, где находятся пакеты программного обеспечения

Чтобы получить подробную информацию о клиенте не проблема с помощью следующего запроса:

$ComputerName = 'MyWin7Machine' 
$WMIParams = @{ 
    ComputerName = $SCCMServer 
    Namespace = 'root\SMS\site_SITEID' 
} 
$Client = Get-WmiObject @WMIParams -Query "select * from sms_r_system where Name='$ComputerName'" 

Solution (благодаря Нарцисс):

$Client = Get-WmiObject @WMIParams -Query "SELECT * FROM SMS_R_System WHERE Name='$Computer' AND IPSubnets != ''" 
Write-Verbose "Computer '$($Client.Name)', IPSubnets '$($Client.IPSubnets)'" 

$Result = Foreach ($S in ($Client.IPSubnets | where {($_ -NE '192.168.1.0') -and ($_ -NE '0.0.0.0') -and 
    ($_ -NE '128.0.0.0') -and ($_ -NE '169.254.0.0') -and ($_ -NE '64.0.0.0')})) { 
    Write-Verbose "Check IP '$S'" 
    Get-WmiObject @WMIParams -Query "SELECT Displayname, SiteSystems, Value, DefaultSiteCode FROM SMS_Boundary WHERE Value = '$S'" 
} 

$Result | Select-Object -ExpandProperty SiteSystems -Unique 
+0

Отношения между клиентами SCCM и точками распространения с или без общего доступа к пакету осуществляются с помощью пограничных групп, на которых расположен клиент, и связанных с ними серверов системы сайта (DP). Общий ресурс пакета заполняется содержимым в зависимости от каждого пакета, в зависимости от того, установлен ли флажок «Копировать содержимое в этом пакете на пакетную долю в точке распространения». Итак, что именно вы пытаетесь сопоставить? Клиентский компьютер с любыми локальными Ds, которые имеют общий пакет, разрешен для любого пакета или для определенных пакетов? – Narcis

+0

Я пытаюсь найти общий доступ (имя сервера), где пакеты публикуются для определенного компьютера. Обычно это сервер het, расположенный ближе всего для быстрой скорости установки. – DarkLite1

ответ

1

На основании ваших предоставленных деталей, ниже сценарий вернет ожидаемый список точек распространения, в которых должны присутствовать пакеты, которые могут быть доступны для них (для этого они должны иметь развертывание). Я предположил, что вы полагаетесь на границы сайта AD, основываясь на вашем примере кода. Кроме того, вам нужно запустить это на компьютере с установленной ролью SMS_Provider.

# Define main variables: 
$site = (Get-WmiObject -Namespace "ROOT\SMS" -Query "Select * from SMS_ProviderLocation" | Select-Object -First 1).SiteCode 

$SCCMConsoleInstallDir = (Get-ItemProperty "hklm:\software\WOW6432Node\Microsoft\ConfigMgr10\setup")."UI Installation Directory" 
Import-Module "$SCCMConsoleInstallDir\bin\ConfigurationManager.psd1" 
cd ($site + ":") 

$ClientName = "MyWin7Machine" 
$ClientObject = Get-WmiObject -Namespace "ROOT\SMS\site_$site" -Query "select * from SMS_R_System" | Where {$_.ADSiteName -ne $null -and $_.Name -eq $ClientName} 
$ClientADSite = $ClientObject.ADSiteName 

$ClientBoundary = Get-CMBoundary | Where {$_.DisplayName -like "*$ClientADSite"} 

$DPs = $ClientBoundary.SiteSystems 

Write-Host "The list of Distribution Points associated with the client $ClientName is the following:" 
Write-Host "$DPs" 

Эта информация также доступна в консоли SCCM, и ее можно настроить. В случае, если вам нужно следовать определенным пакетам, это совершенно другая тема, и SCCM использует для этого внутренние запросы на размещение содержимого. Они также возвращают список мест для запрошенного пакета; начиная с LOCAL DP и продолжая FALLBACK, в зависимости от типа CLR.

+0

Спасибо, Нарцис, но у меня проблемы. 'Get-PSDrive' не показывает мне диск, поэтому я не могу подключиться к нему. Даже в режиме x86. Я должен использовать 'Get-WMIObject' с' $ WMIParams' вместо 'Get-CMBoundary' для запроса деталей SCCM. – DarkLite1

+0

Это потому, что вам необходимо загрузить модуль SCCM PS, который должен выполняться сценарием автоматически (если у вас установлена ​​консоль SCCM). В любом случае, вы можете заменить строку Get-CMBoundary следующим образом: $ ClientBoundary = Get-WmiObject -Namespace «ROOT \ SMS \ site_ $ site» -Query «выберите * из SMS_Boundary» | Где {$ _. DisplayName-like "* $ ClientADSite"} – Narcis

+0

Thx снова, но совпадения нет. Это похоже на '$ ClientObject.ADSiteName = BEL-Brussels-0022' и' $ ClientBoundary.DisplayName = BEL/Brussels/Street Nr', причем последний имеет несколько дубликатов. – DarkLite1

Смежные вопросы