使用 UI (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() > 产生上述错误
- Delete(DeleteOptions) > 我找不到所需选项的规格
- 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()
编辑 2
事实是,当通过控制台删除 SCCM 集合时,集合并不是从清单中删除的唯一内容:例如,分配也被删除了。它提醒在处理 MySQL 或 ORACLE 时的 CASCADE 开关。也许我想做的事情是不可能的
- 不使用控制台
- 不使用 SCCM cmdlet
如果不能那样做,我只需要确定。
编辑 3
经过一段时间的成熟,我开始怀疑这是否可能是授权问题。我的意思是,我使用“-credential”开关或连接到服务器时打开 SCCM 控制台的帐户允许我创建/更新/删除集合,但例如,它不允许我删除一个设备。我希望错误消息会有所不同,但谁知道呢?
或多或少关于同一件事(对不起题外话),试图从命令行中删除一个设备,我发现了这个并且我有相同的错误消息(见上文)。如果它适用于其他人而不是我,它可能与授权有关吗?
编辑 4
我请求了一个比我的技术帐户拥有更多“特权”的服务帐户。我测试了,我有同样的错误。我把授权假设放在一边。