Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 从命令行中删除SCCM集合_Powershell_Wmi_Sccm - Fatal编程技术网

Powershell 从命令行中删除SCCM集合

Powershell 从命令行中删除SCCM集合,powershell,wmi,sccm,Powershell,Wmi,Sccm,在使用UI(SCCM 2012)时,为了能够删除一个集合(比如CollA),您首先需要确保它没有被任何规则链接到另一个集合(比如CollB等),例如: CollB包括CollA CollC不包括CollA 处理大量集合时,删除集合可能非常耗时。因此,我创建了一个脚本 可远程使用,无需通过RDP进行连接 检查COLA是否没有剩余的规则(如果我们要删除COLA,即使这不是问题) 检查COLA是否“链接”到其他集合(包括或排除规则) 这将删除找到的任何规则(在CollB和CollA之间,在Col

在使用UI(SCCM 2012)时,为了能够删除一个集合(比如CollA),您首先需要确保它没有被任何规则链接到另一个集合(比如CollB等),例如:

  • CollB包括CollA
  • CollC不包括CollA
处理大量集合时,删除集合可能非常耗时。因此,我创建了一个脚本

  • 可远程使用,无需通过RDP进行连接
  • 检查COLA是否没有剩余的规则(如果我们要删除COLA,即使这不是问题)
  • 检查COLA是否“链接”到其他集合(包括或排除规则)
  • 这将删除找到的任何规则(在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()>产生上述错误
  • 删除(删除选项)>我找不到所需选项的规格
  • 删除(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()
PS C:\>Set WmiInstance-Class win32\u环境-argument@{Name=“testvar”;VariableValue=“testvalue”;UserName=”“}
PS C:\>(gwmi-class win32\u环境-filter“Name='testvar')。gettype()
PS C:\>(gwmi-class win32_环境-filter“Name='testvar')。删除()
编辑2

事实上,当通过控制台删除SCCM集合时,集合并不是从清单中删除的唯一内容:例如,分配也被删除。当处理MySQL或ORACLE时,它提醒我们级联开关。也许我想做的是不可能的

  • 不使用控制台
  • 不使用SCCM cmdlet
如果不能这样做,我只需要确定一下

编辑3

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

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

编辑4

我请求的服务帐户比我的技术帐户具有更多的“特权”。
我测试过了,我也有同样的错误。我把授权假设放在一边。

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

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

基本上,把-credential拿出来。它现在可以工作了吗?

您可以这样设置脚本:

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

我假设您使用的是System.Management.ManagementObject,对吗?您是否已签出该页面以查看方法以及如何调用它们?请参阅问题更新,跟随您的线索,Raged,我尝试过,从服务器中删除集合,此时不需要提及凭据,并且不起作用(请参阅原始帖子中的错误)。我猜由于级联操作,我无法从命令行删除集合。我明白了,我可以重新创建该问题。我创建了两个集合。链接者与另一个链接的人。如果我先删除限制为的收藏,然后再删除它有效的原始目标收藏。我误导了你或者我不理解你的建议$我的环境中的CollA没有名为LimitedCollectionName的属性。它有一个名为LimitToCollectionName的属性,它指向一个集合,我不能也不想删除该集合。我知道如何“取消”两个集合的链接,无论链接是什么(排除规则、包含规则等)。换言之,我的问题是:如何从命令行中删除一个“孤立”的集合?