2014-03-25 83 views
1

当使用UI(SCCM 2012)时,为了能够删除集合(比方说CollA),首先需要确保它不被任何规则链接到另一个集合(让我们说CollB,等..),如:从命令行中删除SCCM集合

  • CollB包括科亚
  • CollC排除科亚

在有很多藏品的处理,删除了一个集合可能是费时。出于这个原因,我创建了一个脚本,

  • 使用远程以避免需要通过RDP连接
  • 它会检查科拉没有规则左(即使如果我们想删除这不是一个问题科亚)
  • 用来检查是否科亚被“链接”到其他收藏品(包括或排除规则)
  • 其删除发现的任何规则(CollB和科拉之间,CollC和科亚之间)

我现在坚持我不能t找到一种方法来删除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集合,曾经在$科拉,一个System.Management.ManagementObject检索。 我应,如在MSDN页所描述的,能够使用下面的方法:

  • 删除()>产生高于
  • 删除(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() 

EDIT 2

事实是,通过控制台删除SCCM集合时,集合是没有从清单中移除的唯一的事:例如在分配,太删除。它在处理MySQL或ORACLE时提醒了CASCADE开关。也许是我想要做的是不可能的

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

如果不能那么做,我只是需要确定。

编辑3

一些成熟后,我开始怀疑它可能是一个授权问题。我的意思是,我使用“-credential”开关的帐户或连接到服务器时打开SCCM控制台的帐户允许我创建/更新/删除集合,但是,例如,它不允许我删除设备。我希望错误信息会有所不同,但谁知道?

或多或少的关于同样的事情(抱歉的离题),试图从命令行中删除设备,我发现this和我有相同的错误信息(见上文)。如果它适用于其他人而不是我,它可能是授权相关的吗?

EDIT 4

我请求的服务帐户与更多的“特权”比我有我的技术客户。 我测试过,并且发生同样的错误。我抛开授权假设。

+0

我假设它是一个你正在使用一个System.Management.ManagementObject,对不对?你检出了[MSDN](http://msdn.microsoft.com/en-us/library/system.management.managementobject(v = vs.110).aspx)页面来查看方法以及如何调用它们为了它? – TheMadTechnician

+0

查看已更新的问题,跟随您的潜在客户, – projetnumero9

回答

0

我只是使用下面的命令测试这个在我们的SCCM 2012环境:

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

基本上采取-credential离开那里。它现在工作吗?

+0

Raged,我尝试过,从服务器删除集合,此时不需要提及凭据,并且它不起作用(请参阅原始帖子中的错误)。我猜测由于CASCADE操作,我无法从命令行中删除集合。 – projetnumero9

+0

我明白了,我可以重新创建问题。我创建了两个集合。一个与另一个链接。如果我删除首先被限制的集合,则删除它的原始目标集合。 – Raged

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() 
    } 
+0

我误导了你,或者我不明白你的建议。我的环境中的$ CollA没有名为LimitedCollectionName的属性。它有一个名为LimitToCollectionName的属性,它指向一个集合,我不能也不想删除它。我知道如何“断开”两个集合,不管链接如何(排除规则,包含规则等)。换句话说,我的问题是:如何从命令行删除一个“孤儿”的集合? – projetnumero9