从命令行删除SCCM集合

时间:2014-03-25 15:56:07

标签: powershell wmi 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

正如theMadTechnician所指出的,SCCM集合一旦在$ CollA中被检索到,就是一个System.Management.ManagementObject。 我应该,如MSDN页面中所述,能够使用以下方法:

  • 删除()>产生上述错误
  • 删除(DeleteOptions)>我找不到所需选项的规格
  • 删除(ManagementOperationObserver)>我找不到所需选项的规格

为确保我正确理解有关* .Delete()的MSDN页面,我尝试(成功)以下内容:

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集合时,集合不是唯一从库存中删除的东西:例如,分配也被删除了。它在处理MySQL或ORACLE时会提醒CASCADE开关。也许我想要做的事情是不可能的

  • 不使用控制台
  • 不使用SCCM cmdlet

如果不能这样做,我只需要确定。

编辑3

经过一段时间的成熟,我开始怀疑它是否属于授权问题。我的意思是,我正在使用&#34; -credential&#34;切换或连接到服务器时,打开SCCM控制台,允许我创建/更新/删除集合,但是,例如,它不允许我删除设备。我希望错误信息不同但谁知道?

或多或少关于相同的事情(抱歉离题),尝试从命令行中删除设备,我发现this并且我有相同的错误消息(见上文)。如果它适用于其他人而不是我,那么它是否与授权相关?

编辑4

我要求提供更多&#34;特权的服务帐户&#34;比我的技术帐户。 我测试过,我也有同样的错误。我暂时搁置授权假设。

2 个答案:

答案 0 :(得分:0)

我刚刚在SCCM 2012环境中使用以下命令对此进行了测试:

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

基本上,从那里取出-credential。它现在有效吗?

答案 1 :(得分:0)

您可以设置如下脚本:

#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()
    }