【问题标题】:C# Modify Security Scopes on existing Task SequenceC# 修改现有任务序列的安全范围
【发布时间】:2018-09-24 17:41:02
【问题描述】:

我可以修改 SMS_TaskSequencePackage 中的所有属性,除了 SecuredScopeNames

public void setSecurityScopes(WqlConnectionManager connection, string packageID, string newSecurityScopes)
{
    try
    {
        // Take the new security scopes (Security Scopes are stored in strings' array)
        string[] newScopes = { newSecurityScopes };

        // Get the instance with WQLConnectionManager
        IResultObject securityScopesToChange = connection.GetInstance(@"SMS_TaskSequencePackage.PackageID='" + packageID + "'");
        securityScopesToChange["SecuredScopeNames"].StringArrayValue = newScopes;


        // Apply the new Security Scopes
        securityScopesToChange.Put();

    }
    catch (SmsException ex)
    {
        MessageBox.Show("Failed to set TS Security Scopes. Error: " + ex.Message);

    }

}  

我不明白为什么我的 StringArray 没有被存储。 使用这种方法,我可以更改字符串格式的其他属性,但不能更改这个。 谢谢你帮助我。

【问题讨论】:

  • 我无权访问我们的 sccm atm,所以也许我在这里弄错了,但根据文档 (msdn.microsoft.com/en-us/library/cc144760.aspx),我认为 SMS_TaskSequencePackage 没有此属性。 SMS_Package 有它(msdn.microsoft.com/en-us/library/hh458207.aspx),但它在那里也被标记为只读......它可能必须像这里一样以不同的方式添加(msdn.microsoft.com/en-us/library/hh469099.aspx
  • 您在 SMS_Package 和 SMS_TaskSequencePackage 中有此属性。我使用 SCCM CB 1802。也许该属性在此类中也是只读的...?
  • 你是对的,它在 1710 已经是一样的,所以他们可能改变了它并且从未更新过信息。但是,我从之前发布的第三个链接中测试了该方法并且它有效,因此我将其重写为答案

标签: c# wmi configurationmanager sccm wql


【解决方案1】:

属性 SecuredScopeNames 似乎是一个只读参数(as can be seen in the documentation for SMS_Package - 虽然它似乎有点过时),必须通过附加类 SMS_SecuredCategoryMembership 进行修改。

您可以添加这样的范围(查看更多详细信息here):

    // Create a new instance of the scope assignment.
    IResultObject assignment = sccmConnection.CreateInstance("SMS_SecuredCategoryMembership");

    // Configure the assignment
    assignment.Properties["CategoryID"].StringValue = scopeId; // CategoryID from SMS_SecuredCategory
    assignment.Properties["ObjectKey"].StringValue = objectKey; // PackageID
    assignment.Properties["ObjectTypeID"].IntegerValue = objectTypeId; // can get it from SMS_ObjectName with objectkey (probably fixed values)

    // Commit the assignment
    assignment.Put();

CategoryID 或 ScopeId 可以取自 SMS_SecuredCategory ObjectKey 是您的包或 TaskSequence 包的包 ID TaskSequencePackages 的 ObjectTypeId 可能始终为 20,但可以从 SMS_ObjectName 中查询,PackageID 为 ObjectKey(如果没有 where 子句,查询非常缓慢,因为它具有存储在 sccm db 中的所有类型的所有对象)

然而这对于真正的修改是不够的,因为它会保留所有现有的范围,所以如果你想摆脱默认的(或另一个)你还必须调用一个删除(更多细节here):

    // Find the existing scope assignement that matches our parameters.
    IResultObject assignment = sccmConnection.GetInstance("SMS_SecuredCategoryMembership.CategoryID='" + scopeId + "',ObjectKey='" + objectKey + "',ObjectTypeID=" + objectTypeId.ToString());

    // Make sure we found the scope.
    if(assignment == null)
        throw new Exception("Unable to find matching scope, object, and object type.");
    else
        assignment.Delete();

使用相同的三个参数(默认似乎具有保留的 scopeID SMS00UNA,但最好还是从 SMS_SecuredCategory 获取详细信息)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2017-01-10
    • 1970-01-01
    • 2015-10-21
    • 2023-03-20
    相关资源
    最近更新 更多