Удалить коллекцию SCCM из командной строки

При использовании пользовательского интерфейса (SCCM 2012), чтобы иметь возможность удалять коллекцию (скажем, CollA), вам нужно сначала убедиться, что она не связана каким-либо правилом с другим (например, CollB и т. Д.), Например:

  • CollB включает в себя CollA
  • CollC исключает CollA

При работе со многими коллекциями удаление коллекции может занять много времени. По этой причине я создал скрипт,

  • можно использовать удаленно, чтобы избежать необходимости подключения через RDP
  • который проверяет, что у CollA нет правила (даже если это не проблема, если мы хотим удалить CollA)
  • который проверяет, связан ли CollA с другими коллекциями (включить или исключить правила)
  • который удаляет любое найденное правило (между CollB и CollA, между CollC и CollA)

Я застрял сейчас, потому что я не могу найти способ удалить CollA. Для аутентификации и удаленного использования я использую много Powershell и WMI.

$CollA=Get-WmiObject -computername servername -namespace root\sms\site_111 -credential $cred -query "select * from SMS_Collection where Name='Tartempion'"
$CollA.get()

В этот момент я нашел метод Delete(), который, когда я пытаюсь его использовать, дает мне:

Exception calling "Delete" with "0" argument(s): "Generic failure "
At line:1 char:1
+ $coll.delete()
+ ~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Если это метод, который я должен использовать, какие аргументы должны быть переданы?

РЕДАКТИРОВАТЬ 1

Как указывает MadTechnician, коллекция SCCM, однажды полученная в $CollA, System.Management.ManagementObject. Я должен, как описано на страницах MSDN, иметь возможность использовать следующий метод:

  • Delete ()> производит ошибку, упомянутую выше
  • Удалить (DeleteOptions) > Я не могу найти спецификации для необходимых параметров
  • Удалить (ManagementOperationObserver) > Я не могу найти спецификации для необходимых параметров

Чтобы убедиться, что я правильно понял страницу MSDN относительно *.Delete(), я попытался (успешно) следующее:

PS C:\> Set-WmiInstance -Class win32_environment -argument @{Name="testvar";VariableValue="testvalue";UserName="<SYSTEM>"}
PS C:\> (gwmi -class win32_environment -filter "Name='testvar'").gettype()
PS C:\> (gwmi -class win32_environment -filter "Name='testvar'").delete()

РЕДАКТИРОВАТЬ 2

Дело в том, что при удалении коллекции SCCM через консоль коллекция не единственная, которая удаляется из инвентаря: например, назначения тоже удаляются. Это напоминает переключатель CASCADE при работе с MySQL или ORACLE. Может быть, то, что я пытаюсь сделать, не возможно

  • без использования консоли
  • без использования командлетов SCCM

Если это не может быть сделано таким образом, я просто должен быть уверен.

РЕДАКТИРОВАТЬ 3

После некоторого созревания я начинаю задаваться вопросом, может ли это быть вопрос авторизации. Я имею в виду, что учетная запись, которую я использую с переключателем "-credential" или при подключении к серверу, чтобы открыть консоль SCCM, позволяет мне создавать / обновлять / удалять коллекции, но, например, не позволяет мне удалять устройство. Я ожидаю, что сообщение об ошибке будет другим, но кто знает?

Примерно так же (извините за отступление), пытаясь удалить устройство из командной строки, я обнаружил это, и у меня тоже самое сообщение об ошибке (см. Выше). Если это работает для других, а не для меня, может ли это быть связано с авторизацией?

РЕДАКТИРОВАТЬ 4

Я запросил служебную учетную запись с большим количеством "привилегий", чем у моей технической учетной записи. Я тестировал и у меня такая же ошибка. Я оставляю в стороне гипотезу авторизации.

2 ответа

Вы могли бы потенциально настроить скрипт так:

#if the delete command fails...
 if(!($?))
   {
     $limitedcollectionName = $colla.LimitedCollectionName
     $limitedcollection = Get-WmiObject -computername servername -namespace root\sms\site_111 -query "select * from SMS_Collection where Name=`'$limitedcollectionname`'"
     $limitedcollectionname.delete()
    }

Я только что проверил это в нашей среде SCCM 2012 с помощью следующей команды:

$CollA=Get-WmiObject -computername servername -namespace root\sms\site_111 -query "select * from SMS_Collection where Name='Tartempion'"

В основном, возьмите -credential оттуда. Это работает сейчас?

Другие вопросы по тегам