{"id":313,"date":"2019-03-08T19:20:23","date_gmt":"2019-03-08T19:20:23","guid":{"rendered":"http:\/\/michaelschultz.net\/tech\/?p=313"},"modified":"2019-03-10T19:09:48","modified_gmt":"2019-03-10T19:09:48","slug":"configmgr-powershell-script-create-collections-off-compliance-settings-configuration-items","status":"publish","type":"post","link":"https:\/\/michaelschultz.net\/tech\/configmgr-powershell-script-create-collections-off-compliance-settings-configuration-items\/","title":{"rendered":"ConfigMgr PowerShell Script &#8211; Create Collections off Compliance Settings Configuration Items"},"content":{"rendered":"\n<p>The script uses Get-CMConfigurationItem cmdlet to get a list of LocalizedDisplayNames of Compliance Setting CIs and then runs a Foreach to create three collections based using the LocalizedDisplayName.  Parameters specify the CM Site Code, Limiting Collection collection ID, and the CI Name. It does a check to see if a collection exists beofre creating which is also a self repair feature as a deleted collection will be recreated.<\/p>\n\n\n\n<!--more-->\n\n\n\n\n<div class=\"codecolorer-container powershell default\" style=\"overflow:auto;white-space:nowrap;width:500px;\"><div class=\"powershell codecolorer\"><span class=\"coMULTI\">&lt;#<br \/>\n.SYNOPSIS<br \/>\nThis script creates Compliant, Non-Compliant, and Failure collections for Copliance Settings Configuration Items<br \/>\n<br \/>\n.SYNTAX<br \/>\ncreate_CI_compliance_collections.ps1 -sc &lt;site_code&gt; -limiter &lt;limiting_collection&gt; -ciname &lt;Name_of_CI&gt;<br \/>\n<br \/>\n.DESCRIPTION<br \/>\nThe script uses Get-CMConfigurationItem cmdlet to get a list of LocalizedDisplayNames of Compliance Setting CIs and then runs a Foreach to create three collections based using the LocalizedDisplayName. &nbsp;Parameters specify the CM Site Code, LImiting Collection collection ID, and the CI Name. It does a check to see if a collection exists beofre creating which is also a self repair feature as a deleted collection will be recreated.<br \/>\n<br \/>\n.PARAMETER sc<br \/>\nConfigMgr site code. &nbsp;Format is site code followed by :<br \/>\n<br \/>\n.PARAMETER limiter<br \/>\nCollection ID of limiting collection<br \/>\n<br \/>\n.PARAMETER ciname<br \/>\nName of the CI to build collections off. &nbsp;This can use * as wildcard as the command run is Get-CMConfigurationItem -fast -Name $ciname | Select-Object -ExpandProperty LocalizedDisplayName<br \/>\n<br \/>\n.INPUTS<br \/>\n<br \/>\n.OUTPUTS<br \/>\n<br \/>\n.NOTES<br \/>\nFileName: create_CI_compliance_collections.ps1<br \/>\nAuthor: Michael Schultz<br \/>\nContact: mschultz@necro-monkey.com<br \/>\nCreated: 20190307<br \/>\nModified: <br \/>\nVersion: 1<br \/>\n<br \/>\n.EXAMPLE<br \/>\ncreate_CI_compliance_collections.ps1 -sc BOB -limiter SMS00001 -ciname *bob*<br \/>\n<br \/>\n#&gt;<\/span><br \/>\n<br \/>\n<span class=\"co1\">#-----Parameters-----<\/span><br \/>\n<br \/>\n<span class=\"kw3\">Param<\/span> <span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Parameter<span class=\"br0\">&#40;<\/span>ParameterSetName<span class=\"sy0\">=<\/span><span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span>Mandatory<span class=\"sy0\">=<\/span><span class=\"re0\">$true<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#91;<\/span><span class=\"re3\">string<\/span><span class=\"br0\">&#93;<\/span><span class=\"re0\">$sc<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Parameter<span class=\"br0\">&#40;<\/span>ParameterSetName<span class=\"sy0\">=<\/span><span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span>Mandatory<span class=\"sy0\">=<\/span><span class=\"re0\">$true<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#91;<\/span><span class=\"re3\">string<\/span><span class=\"br0\">&#93;<\/span><span class=\"re0\">$limiter<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#91;<\/span>Parameter<span class=\"br0\">&#40;<\/span>ParameterSetName<span class=\"sy0\">=<\/span><span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span>Mandatory<span class=\"sy0\">=<\/span><span class=\"re0\">$true<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#91;<\/span><span class=\"re3\">string<\/span><span class=\"br0\">&#93;<\/span><span class=\"re0\">$ciname<\/span> &nbsp; &nbsp;<br \/>\n<br \/>\n<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"co1\">#-----Initializations and Module Imports-----<\/span><br \/>\n<br \/>\n<span class=\"co1\">#Get ConfigMgr Console Install Path to locate PS Module.<\/span><br \/>\n<br \/>\n<span class=\"kw3\">If<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">Test-Path<\/span> <span class=\"st0\">&quot;C:\\Program Files\\Microsoft Configuration Manager\\AdminConsole\\bin\\ConfigurationManager.psd1&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; Import<span class=\"sy0\">-<\/span>Module <span class=\"st0\">&quot;C:\\Program Files\\Microsoft Configuration Manager\\AdminConsole\\bin\\ConfigurationManager.psd1&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw3\">elseIf<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">Test-Path<\/span> <span class=\"st0\">&quot;C:\\Program Files (x86)\\Microsoft Configuration Manager\\AdminConsole\\bin\\ConfigurationManager.psd1&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; Import<span class=\"sy0\">-<\/span>Module <span class=\"st0\">&quot;C:\\Program Files (x86)\\Microsoft Configuration Manager\\AdminConsole\\bin\\ConfigurationManager.psd1&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw3\">elseif<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">test-path<\/span> <span class=\"st0\">&quot;d:\\Program Files\\Microsoft Configuration Manager\\AdminConsole\\bin\\ConfigurationManager.psd1&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; Import<span class=\"sy0\">-<\/span>Module <span class=\"st0\">&quot;d:\\Program Files\\Microsoft Configuration Manager\\AdminConsole\\bin\\ConfigurationManager.psd1&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw3\">elseIf<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">Test-Path<\/span> <span class=\"st0\">&quot;d:\\Program Files (x86)\\Microsoft Configuration Manager\\AdminConsole\\bin\\ConfigurationManager.psd1&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; Import<span class=\"sy0\">-<\/span>Module <span class=\"st0\">&quot;d:\\Program Files (x86)\\Microsoft Configuration Manager\\AdminConsole\\bin\\ConfigurationManager.psd1&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw3\">Else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">Write-output<\/span> <span class=\"st0\">&quot;Can't Find your ConfigMgr Module&quot;<\/span><br \/>\n&nbsp; &nbsp; exit<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co1\">#Change to ConfigMgr PSDrive<\/span><br \/>\n<span class=\"kw1\">Set-Location<\/span> <span class=\"re0\">$sc<\/span><br \/>\n<br \/>\n<span class=\"co1\">#-----Variables-----<\/span><br \/>\n<br \/>\n<span class=\"re0\">$recurint<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">'Days'<\/span><br \/>\n<span class=\"re0\">$recurct<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">'1'<\/span><br \/>\n<span class=\"re0\">$schedule<\/span> <span class=\"sy0\">=<\/span> New<span class=\"sy0\">-<\/span>CMSchedule <span class=\"sy0\">-<\/span>RecurInterval <span class=\"re0\">$recurint<\/span> <span class=\"sy0\">-<\/span>RecurCount <span class=\"re0\">$recurct<\/span><br \/>\n<span class=\"re0\">$cis<\/span> <span class=\"sy0\">=<\/span> Get<span class=\"sy0\">-<\/span>CMConfigurationItem <span class=\"sy0\">-<\/span>fast <span class=\"kw5\">-Name<\/span> <span class=\"re0\">$ciname<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw1\">Select-Object<\/span> <span class=\"kw5\">-ExpandProperty<\/span> LocalizedDisplayName<br \/>\n<br \/>\n<span class=\"co1\">#-----Functions-----<\/span><br \/>\n<br \/>\n<span class=\"co1\">#-----Logging-----<\/span><br \/>\n<br \/>\n<span class=\"co1\">#-----Execution-----<\/span><br \/>\n<br \/>\n<span class=\"kw3\">Foreach<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$LocalizedDisplayName<\/span> <span class=\"kw3\">in<\/span> <span class=\"re0\">$cis<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"re0\">$cildname<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$LocalizedDisplayName<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$collcompliant<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$cildname<\/span> <span class=\"sy0\">+<\/span> <span class=\"st0\">' - Compliant'<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$collnoncompliant<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$cildname<\/span> <span class=\"sy0\">+<\/span> <span class=\"st0\">' - Non-Compliant'<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$collerror<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$cildname<\/span> <span class=\"sy0\">+<\/span> <span class=\"st0\">' - Failure'<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"re0\">$CollectionExist<\/span> <span class=\"sy0\">=<\/span> Get<span class=\"sy0\">-<\/span>CMDeviceCollection <span class=\"kw5\">-Name<\/span> <span class=\"re0\">$collcompliant<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">If<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$CollectionExist<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$rulevariablecomp<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">'select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System where SMS_R_System.ResourceID in (select SMS_CI_COMP.ResourceID from SMS_CI_CurrentComplianceStatus as SMS_CI_COMP inner join SMS_ConfigurationItem as SMS_CI on SMS_CI.ci_id=SMS_CI_COMP.ci_id where ((SMS_CI_COMP.DisplayName = &quot;'<\/span> <span class=\"sy0\">+<\/span> <span class=\"re0\">$cildname<\/span> <span class=\"sy0\">+<\/span> <span class=\"st0\">'&quot; and SMS_CI.islatest = 1 &nbsp;and SMS_CI_COMP.ComplianceState = 1) and SMS_CI_COMP.LastComplianceMessageTime &gt;= Dateadd(dd,-7,GETDATE())))'<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; New<span class=\"sy0\">-<\/span>CMDeviceCollection <span class=\"sy0\">-<\/span>LimitingCollectionId <span class=\"re0\">$limiter<\/span> <span class=\"kw5\">-Name<\/span> <span class=\"re0\">$collcompliant<\/span> <span class=\"sy0\">-<\/span>RefreshSchedule <span class=\"re0\">$schedule<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; Add<span class=\"sy0\">-<\/span>CMDeviceCollectionQueryMembershipRule <span class=\"sy0\">-<\/span>CollectionName <span class=\"re0\">$collcompliant<\/span> &nbsp;<span class=\"sy0\">-<\/span>RuleName Rule <span class=\"sy0\">-<\/span>QueryExpression <span class=\"re0\">$rulevariablecomp<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"re0\">$CollectionExist<\/span> <span class=\"sy0\">=<\/span> Get<span class=\"sy0\">-<\/span>CMDeviceCollection <span class=\"kw5\">-Name<\/span> <span class=\"re0\">$collnoncompliant<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">If<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$CollectionExist<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$rulevariablenon<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">'select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System where SMS_R_System.ResourceID in (select SMS_CI_COMP.ResourceID from SMS_CI_CurrentComplianceStatus as SMS_CI_COMP inner join SMS_ConfigurationItem as SMS_CI on SMS_CI.ci_id=SMS_CI_COMP.ci_id where ((SMS_CI_COMP.DisplayName = &quot;'<\/span> <span class=\"sy0\">+<\/span> <span class=\"re0\">$cildname<\/span> <span class=\"sy0\">+<\/span> <span class=\"st0\">'&quot; and SMS_CI.islatest = 1 &nbsp;and SMS_CI_COMP.ComplianceState = 2) and SMS_CI_COMP.LastComplianceMessageTime &gt;= Dateadd(dd,-7,GETDATE())))'<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; New<span class=\"sy0\">-<\/span>CMDeviceCollection <span class=\"sy0\">-<\/span>LimitingCollectionId <span class=\"re0\">$limiter<\/span> <span class=\"kw5\">-Name<\/span> <span class=\"re0\">$collnoncompliant<\/span> <span class=\"sy0\">-<\/span>RefreshSchedule <span class=\"re0\">$schedule<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; Add<span class=\"sy0\">-<\/span>CMDeviceCollectionQueryMembershipRule <span class=\"sy0\">-<\/span>CollectionName <span class=\"re0\">$collnoncompliant<\/span> &nbsp;<span class=\"sy0\">-<\/span>RuleName Rule <span class=\"sy0\">-<\/span>QueryExpression <span class=\"re0\">$rulevariablenon<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"re0\">$CollectionExist<\/span> <span class=\"sy0\">=<\/span> Get<span class=\"sy0\">-<\/span>CMDeviceCollection <span class=\"kw5\">-Name<\/span> <span class=\"re0\">$collerror<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">If<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$CollectionExist<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$rulevariableer<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">'select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System where SMS_R_System.ResourceID in (select SMS_CI_COMP.ResourceID from SMS_CI_CurrentComplianceStatus as SMS_CI_COMP inner join SMS_ConfigurationItem as SMS_CI on SMS_CI.ci_id=SMS_CI_COMP.ci_id where ((SMS_CI_COMP.DisplayName = &quot;'<\/span> <span class=\"sy0\">+<\/span> <span class=\"re0\">$cildname<\/span> <span class=\"sy0\">+<\/span> <span class=\"st0\">'&quot; and SMS_CI.islatest = 1 &nbsp;and SMS_CI_COMP.ComplianceState = 4) and SMS_CI_COMP.LastComplianceMessageTime &gt;= Dateadd(dd,-7,GETDATE())))'<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; New<span class=\"sy0\">-<\/span>CMDeviceCollection <span class=\"sy0\">-<\/span>LimitingCollectionId <span class=\"re0\">$limiter<\/span> <span class=\"kw5\">-Name<\/span> <span class=\"re0\">$collerror<\/span> <span class=\"sy0\">-<\/span>RefreshSchedule <span class=\"re0\">$schedule<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; Add<span class=\"sy0\">-<\/span>CMDeviceCollectionQueryMembershipRule <span class=\"sy0\">-<\/span>CollectionName <span class=\"re0\">$collerror<\/span> &nbsp;<span class=\"sy0\">-<\/span>RuleName Rule <span class=\"sy0\">-<\/span>QueryExpression <span class=\"re0\">$rulevariableer<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n\n\n\n\n<p>The script can also be found on my GitHub repo at <a href=\"https:\/\/github.com\/NecroMonkey\/vault\/blob\/master\/ConfigMgr-Scripts\/create_CI_compliance_collections.ps1\">https:\/\/github.com\/NecroMonkey\/vault\/blob\/master\/ConfigMgr-Scripts\/create_CI_compliance_collections.ps1<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The script uses Get-CMConfigurationItem cmdlet to get a list of LocalizedDisplayNames of Compliance Setting CIs and then runs a Foreach to create three collections based using the LocalizedDisplayName. Parameters specify the CM Site Code, Limiting Collection collection ID, and the CI Name. It does a check to see if a collection exists beofre creating which &hellip; <a href=\"https:\/\/michaelschultz.net\/tech\/configmgr-powershell-script-create-collections-off-compliance-settings-configuration-items\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;ConfigMgr PowerShell Script &#8211; Create Collections off Compliance Settings Configuration Items&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[4,14,13],"tags":[],"class_list":["post-313","post","type-post","status-publish","format-standard","hentry","category-configmgr","category-powershell","category-scripting"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p98a2r-53","post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/posts\/313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/comments?post=313"}],"version-history":[{"count":2,"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/posts\/313\/revisions"}],"predecessor-version":[{"id":316,"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/posts\/313\/revisions\/316"}],"wp:attachment":[{"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/media?parent=313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/categories?post=313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/tags?post=313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}