评价这篇文章

为Granfeldt FIM/MIM PowerShell管理代理生成schema.ps1

开始编写第一个Forefront/Microsoft Identity ManagerGranfeldt PowerShell管理代理可能有点吓人。在您可以做几乎任何事情之前,您需要为PSMA定义模式。同样,如果你写了很多,模式文件的生成通常比它应该花费的时间要长,并且当您只想为导入和导出脚本编写逻辑时,可能有点繁琐。

在与Soren讨论了PSMA的增强功能后,我建议如果schema.ps1文件的生成可以(半)自动化,那就太棒了。这是我第一次尝试这样做。

我的方法是;

  • 使用PowerShell获取表示将在PSMA上管理的对象的对象
  • 枚举PSObject的属性并相应生成架构脚本
  • 接下来要做的就是:
    • 定义锚定点
    • 定义对象类型的名称
    • 如果MA将有多个对象类,则组合多个对象类
      • 为驻留在同一架构文件中的任何其他对象类更新$obj到$obj2等

下面我提供了四个例子,涵盖了生成模式定义和输出的脚本。四个例子包括:

  • Azure广告用户
  • Azure广告组
  • 工作日用户
  • 平面文件csv

示例1:Azure Active Directory用户

下面的示例使用azure ad PowerShell模块连接到Azure AD。然后,它获取一个用户对象(更新第7行以供用户检索),并枚举用户的属性以生成模式文件。

输出如下:

$obj=新对象-类型pscustomobject$obj添加成员-类型noteproperty-名称“锚定Youranchorattr字符串”-值“”。$obj添加成员-类型noteproperty-名称“objectclass string”-值“YourObjectClass”$obj添加成员-类型noteproperty-名称“accountEnabled boolean”-值$true$obj添加成员-类型noteproperty-名称“agegroup string”-值“string”$obj添加成员-类型noteproperty-名称“assignedlicenses string[]”-value(“”,“)$obj添加成员-类型noteproperty-名称”assignedplans string[]-value(“”,“)$obj添加成员-类型noteproperty-名称”city string“-值“string”$obj添加成员-类型noteproperty-名称“companyname string”-值“string”$obj添加成员-类型noteproperty-名称“consentprovidedforminor string”-值“string”$obj添加成员-类型noteproperty-名称“country string”-值“string”$obj添加成员-类型noteproperty-名称“creationtype string”-值“string”$obj添加成员-类型noteproperty-名称“deletiontimestamp string”-值“string”$obj添加成员-类型noteproperty-名称“department string”-值“string”$obj添加成员-类型noteproperty-名称“dirsyncenabled boolean”-值$true$obj添加成员-类型noteproperty-名称“displayname string”-值“string”$obj添加成员-类型noteproperty-名称“extensionproperty string[]”-value(“”,“)$obj添加成员-类型noteproperty-名称”facsimileplephonenumber string“-值“string”$obj添加成员-类型noteproperty-名称“givenname string”-值“string”$obj添加成员-类型noteproperty-名称“不可变ID字符串”-值“string”$obj添加成员-类型noteproperty-名称“iscompromified boolean”-值$true$obj_add member-type noteproperty-name“jobtitle_string”-值“string”$obj添加成员-类型noteproperty-名称“lastdirsynctime string”-值“string”$obj添加成员-类型noteproperty-名称“legalagegroupclassification string”-值“string”$obj添加成员-类型noteproperty-名称“mail string”-值“string”$obj添加成员-类型noteproperty-名称“mailnickname string”-值“string”$obj添加成员-类型noteproperty-名称“mobile string”-值“string”$obj添加成员-类型noteproperty-名称“objectid string”-值“string”$obj添加成员-类型noteproperty-名称“objecttype string”-值“string”$obj添加成员-类型noteproperty-名称“onPremisesSecurityIdentifier string”-值“string”$obj添加成员-类型noteproperty-名称“其他邮件”字符串[]-value(“”,“)$obj添加成员-类型noteproperty-名称”passwordpolicies string“-值“string”$obj添加成员-类型noteproperty-名称“physicaldeliveryofficename string”-值“string”$obj添加成员-类型noteproperty-名称“postalcode string”-值“string”$obj添加成员-类型noteproperty-名称“preferredlanguage string”-值“string”$obj添加成员-类型noteproperty-名称“provisionedplans string[]”-value(“”,“)$obj add member-type noteproperty-name”ProvisioningErrors string[]-value(“”,“)$obj add member-type noteproperty-name”proxyAddresses string[]-value(“”,“)$obj add member-type noteproperty-name”refreshTokensvalidFromDateTime string“-值“string”$obj添加成员-类型noteproperty-名称“showinAddressList boolean”-值$true$obj_add member-type noteproperty-name“signinnames string[]”-值(“”,“)$obj添加成员-类型noteproperty-名称”siproxyaddress string“-值“string”$obj添加成员-类型noteproperty-名称“state string”-值“string”$obj添加成员-类型noteproperty-名称“streetaddress string”-值“string”$obj添加成员-类型noteproperty-名称“姓字符串”-值“string”$obj添加成员-类型noteproperty-名称“电话号码字符串”-值“string”$obj添加成员-类型noteproperty-名称“usagelocation string”-值“string”$obj添加成员-类型noteproperty-名称“userprincipalname string”-值“string”$obj添加成员-类型noteproperty-名称“usertype string”-值“string”

更新要使用的属性的定位点。我建议使用objectid,并为objectclass提供一个名称,说明您希望它在MA(用户,aaduser或类似文件)并将其保存为类似schema.ps1的文件,然后就可以开始了。

示例2:Azure Active Directory组

下面的示例使用azure ad PowerShell模块连接到Azure AD。然后,它获取一个组对象(更新第7行以获取组),并枚举该组的属性以生成架构文件。

输出如下:

$obj=新对象-类型pscustomobject$obj添加成员-类型noteproperty-名称“锚定Youranchorattr字符串”-值“”。$obj添加成员-类型noteproperty-名称“objectclass string”-值“YourObjectClass”$obj添加成员-类型noteproperty-名称“deletiontimestamp string”-值“string”$obj添加成员-类型noteproperty-名称“描述字符串”-值“string”$obj添加成员-类型noteproperty-名称“dirsyncenabled boolean”-值$true$obj添加成员-类型noteproperty-名称“displayname string”-值“string”$obj添加成员-类型noteproperty-名称“lastdirsynctime string”-值“string”$obj添加成员-类型noteproperty-名称“mail string”-值“string”$obj添加成员-类型noteproperty-名称“mailenabled boolean”-值$true$obj_add member-type noteproperty-name“mailnickname_string”-值“string”$obj添加成员-类型noteproperty-名称“objectid string”-值“string”$obj添加成员-类型noteproperty-名称“objecttype string”-值“string”$obj添加成员-类型noteproperty-名称“onPremisesSecurityIdentifier string”-值“string”$obj添加成员-类型noteproperty-名称“ProvisioningErrors String[]”-value(“”,“)$obj add member-type noteproperty-name”proxyAddresses string[]-value(“”,“)$obj添加成员-类型noteproperty-名称”securityEnabled boolean“-值$true

更新要使用的属性的定位点。我建议objectid,并给objectclass一个名称,说明您希望它在您的MA(组,aadgroup或类似)并将其保存为类似schema.ps1的文件,然后就可以开始了。

示例3:工作日用户

下面的示例使用工作日PowerShell模块连接到工作日。然后,它获取一个用户对象(更新第7行以供用户检索),并枚举用户的属性以生成模式文件。

更新

  • 第6行显示您的服务名称和租户。
  • 要检索的对象的第13行

此脚本与上面的aad用户和组不同,因为返回的PowerShell对象使用NoteProperty作为类型。所以我更新了第14行。另外,get成员解析时的属性包含一个值,因此我必须获取属性名的结果子字符串。这就是这种变化的作用:

D美元[1个]子字符串(0,请D美元[1个]索引(他说:“这是一个很好的选择。”=他说:“这是一个很好的选择。”))

输出如下:

$obj=新对象-类型pscustomobject$obj添加成员-类型noteproperty-名称“锚定Youranchorattr字符串”-值“”。$obj添加成员-类型noteproperty-名称“objectclass string”-值“YourObjectClass”$obj添加成员-类型noteproperty-名称“businesstitle string”-值“string”$obj添加成员-类型noteproperty-名称“firstname string”-值“string”$obj添加成员-类型noteproperty-名称“jobprofilename string”-值“string”$obj添加成员-类型noteproperty-名称“lastname string”-值“string”$obj添加成员-类型noteproperty-名称“位置字符串”-值“string”$obj添加成员-类型noteproperty-名称“preferredname string”-值“string”$obj添加成员-类型noteproperty-名称“userid string”-值“string”$obj添加成员-类型noteproperty-名称“workerdescriptor string”-值“string”$obj添加成员-类型noteproperty-名称“workerid string”-值“string”$obj添加成员-类型noteproperty-名称“workertype string”-值“string”$obj添加成员-类型noteproperty-名称“workertypereference string”-值“string”$obj添加成员-类型noteproperty-名称“工作区字符串”-值“string”

示例4:平面文件csv

下面的示例使用带标题的示例csv文件。它使用标题行生成架构文件。它将所有列默认为字符串。

更新;

  • csv文件名的第2行

输出如下(对于我的csv文件):

$obj=新对象-类型pscustomobject$obj添加成员-类型noteproperty-名称“锚定Youranchorattr字符串”-值“”。$obj添加成员-类型noteproperty-名称“objectclass string”-值“YourObjectClass”$obj添加成员-类型noteproperty-名称“id string”-值“string”$obj添加成员-类型noteproperty-名称“name string”-值“string”$obj添加成员-类型noteproperty-名称“displayname string”-值“string”$obj添加成员-类型noteproperty-名称“注释字符串”-值“string”$obj添加成员-类型noteproperty-名称“created string”-值“string”$obj添加成员-类型noteproperty-名称“enddate string”-值“string”$obj添加成员-类型noteproperty-名称“lastlogon string”-值“string”$obj添加成员-类型noteproperty-名称“modified string”-值“string”$obj添加成员-类型noteproperty-名称“startdate string”-值“string”$obj添加成员-类型noteproperty-名称“状态字符串”-值“string”$obj添加成员-类型noteproperty-名称“类型字符串”-值“string”$obj添加成员-类型noteproperty-名称“groups string”-值“string”$obj添加成员-类型noteproperty-名称“costcenter string”-值“string”$obj添加成员-类型noteproperty-名称“country string”-值“string”$obj添加成员-类型noteproperty-名称“department string”-值“string”$obj添加成员-类型noteproperty-名称“division string”-值“string”$obj添加成员-类型noteproperty-名称“email string”-值“string”$obj添加成员-类型noteproperty-名称“employeenumber string”-值“string”$obj添加成员-类型noteproperty-名称“familyname string”-值“string”$obj添加成员-类型noteproperty-名称“givenname string”-值“string”$obj添加成员-类型noteproperty-名称“尊敬的前缀字符串”-值“string”$obj添加成员-类型noteproperty-名称“尊敬的后缀字符串”-值“string”$obj添加成员-类型noteproperty-名称“locale string”-值“string”$obj添加成员-类型noteproperty-名称“位置字符串”-值“string”$obj添加成员-类型noteproperty-名称“manager string”-值“string”$obj添加成员-类型noteproperty-名称“middlename string”-值“string”$obj添加成员-类型noteproperty-名称“组织字符串”-值“string”$obj添加成员-类型noteproperty-名称“phonenumber string”-值“string”$obj添加成员-类型noteproperty-名称“preferredlanguage string”-值“string”$obj添加成员-类型noteproperty-名称“preferredname string”-值“string”$obj添加成员-类型noteproperty-名称“secondaryemail string”-值“string”$obj添加成员-类型noteproperty-名称“secondaryPhoneNumber字符串”-值“string”$obj添加成员-类型noteproperty-名称“时区字符串”-值“string”$obj添加成员-类型noteproperty-名称“title string”-值“string”$obj添加成员-类型noteproperty-名称“风险字符串”-值“string”$obj添加成员-类型noteproperty-名称“workerwid string”-值“string”$obj添加成员-类型noteproperty-名称“workerdescriptor string”-值“string”$obj添加成员-类型noteproperty-名称“workerid string”-值“string”$obj添加成员-类型noteproperty-名称“otherid string”-值“string”$obj添加成员-类型noteproperty-名称“jobprofilename string”-值“string”$obj添加成员-类型noteproperty-名称“工作区字符串”-值“string”$obj添加成员-类型noteproperty-名称“workertypereference string”-值“string”$obj添加成员-类型noteproperty-名称“workertype string”-值“string”美元obj

总结

使用一个简单的脚本和一个示例对象,我们可以快速创建granfeldt-psma模式定义脚本的基础。
如Workday示例所示,需要进行细微的调整,但它仍然比手动生成要快得多。

希望这能帮助你快速开始第一次训练,或者你正在建造的下一个psma。

类别:
职能指令手册,请 PowerShell
标签:
,请 ,请 ,请

留下答复