{"id":57,"date":"2017-09-06T07:47:07","date_gmt":"2017-09-06T07:47:07","guid":{"rendered":"http:\/\/michaelschultz.net\/tech\/?p=57"},"modified":"2018-05-23T00:20:56","modified_gmt":"2018-05-23T00:20:56","slug":"sccm-compliance-settings-scripts-to-alter-service-state","status":"publish","type":"post","link":"https:\/\/michaelschultz.net\/tech\/sccm-compliance-settings-scripts-to-alter-service-state\/","title":{"rendered":"SCCM Compliance Settings Scripts to Alter Service State"},"content":{"rendered":"<p>Previously I showed how I used SCCM Compliance Settings and Boundary Groups to apply BITS settings. This time I have a discovery and remediation script that can be used with enforce a specific state on a service. If you want to make sure a client\u2019s App-V service stays up or Windows Defender is disabled because you are using another security suite, this could be of help. The script uses variables so someone could easily set the state of the service and start type to what they want.<!--more--><\/p>\n<p>I am just going to go over the scripts and not how to do the Compliance Settings stuff Microsoft has documentation explaining that better than I can.<\/p>\n<p>There are four variables that need to be set:<\/p>\n<p>$name = Name of the service. I typically get it by running the get-service cmdlet on a box I know has the service and use the Name field to get the proper name<br \/>\n$dsrdstrt = The desired start type which can be Automatic, Manual, or Disabled<br \/>\n$dsrdstt = The desired state for the service which can be Running, Stopped, Paused<br \/>\n$logfile = The path and name of the log file<\/p>\n<p>That is all there is to them. Set the variables for each script and have fun.<\/p>\n<p><strong>Discovery Script<\/strong><\/p>\n<div class=\"codecolorer-container powershell default\" style=\"overflow:auto;white-space:nowrap;width:500px;\"><div class=\"powershell codecolorer\"><span class=\"co1\">#set variables<\/span><br \/>\n<span class=\"re0\">$name<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;AppVClient&quot;<\/span> <span class=\"co1\">#name of service<\/span><br \/>\n<span class=\"re0\">$dsrdstrt<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;Automatic&quot;<\/span> <span class=\"co1\">#desired start type: Automatic, Manual, Disabled<\/span><br \/>\n<span class=\"re0\">$dsrdstt<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;Running&quot;<\/span> <span class=\"co1\">#desired state: Running, Stopped, Paused<\/span><br \/>\n<br \/>\n<span class=\"co1\">#Get service info<\/span><br \/>\n<span class=\"re0\">$srv<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">get-service<\/span> <span class=\"re0\">$name<\/span> <span class=\"kw5\">-ErrorAction<\/span> SilentlyContinue<br \/>\n<br \/>\n<span class=\"kw3\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$srv<\/span> <span class=\"kw4\">-ne<\/span> <span class=\"re0\">$null<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"re0\">$srvstat<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$srv<\/span>.status<br \/>\n<span class=\"re0\">$srvstart<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$srv<\/span>.StartType<br \/>\n<br \/>\n<span class=\"kw3\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$srvstat<\/span> <span class=\"kw4\">-eq<\/span> <span class=\"st0\">&quot;$dsrdstt&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw3\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$srv<\/span>.StartType <span class=\"kw4\">-eq<\/span> <span class=\"st0\">&quot;$dsrdstrt&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"re0\">$compliance<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;true&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw3\">else<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"re0\">$compliance<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;false&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw3\">else<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"re0\">$compliance<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;false&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw3\">else<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"re0\">$compliance<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;true&quot;<\/span> <span class=\"co1\">#This is built on the basis of not existing is compliant. Can be changed to false to set not existing as not compliant.<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n$compliance<\/div><\/div>\n<p><strong>Remediation Script<\/strong><\/p>\n<div class=\"codecolorer-container powershell default\" style=\"overflow:auto;white-space:nowrap;width:500px;\"><div class=\"powershell codecolorer\"><span class=\"co1\">#set variables<\/span><br \/>\n<span class=\"re0\">$name<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;AppVClient&quot;<\/span> <span class=\"co1\">#name of service<\/span><br \/>\n<span class=\"re0\">$dsrdstrt<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;Automatic&quot;<\/span> <span class=\"co1\">#desired start type: Automatic, Manual, Disabled<\/span><br \/>\n<span class=\"re0\">$dsrdstt<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;Running&quot;<\/span> <span class=\"co1\">#desired state: Running, Stopped, Paused<\/span><br \/>\n<br \/>\n<span class=\"co1\">#Get service info<\/span><br \/>\n<span class=\"re0\">$srv<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">get-service<\/span> <span class=\"re0\">$name<\/span> <span class=\"kw5\">-ErrorAction<\/span> SilentlyContinue<br \/>\n<br \/>\n<span class=\"kw3\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$srv<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"re0\">$srvstat<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$srv<\/span>.status<br \/>\n<span class=\"re0\">$srvstart<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$srv<\/span>.StartType<br \/>\n<br \/>\n<span class=\"co1\">#set service startup type if it doesn't match the set variable<\/span><br \/>\n<span class=\"kw3\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$srvstart<\/span> <span class=\"kw4\">-ne<\/span> <span class=\"st0\">&quot;$dsrdstrt&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">Set-Service<\/span> <span class=\"kw5\">-Name<\/span> <span class=\"re0\">$name<\/span> <span class=\"kw5\">-StartupType<\/span> <span class=\"re0\">$dsrdstrt<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"co1\">#set service state type if it doesn't match the set variable<\/span><br \/>\n<span class=\"kw3\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$srvstat<\/span> <span class=\"kw4\">-ne<\/span> <span class=\"st0\">&quot;$dsrdstt&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">Set-Service<\/span> <span class=\"kw5\">-Name<\/span> <span class=\"re0\">$name<\/span> <span class=\"kw5\">-Status<\/span> <span class=\"re0\">$dsrdstt<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Previously I showed how I used SCCM Compliance Settings and Boundary Groups to apply BITS settings. This time I have a discovery and remediation script that can be used with enforce a specific state on a service. If you want to make sure a client\u2019s App-V service stays up or Windows Defender is disabled because &hellip; <a href=\"https:\/\/michaelschultz.net\/tech\/sccm-compliance-settings-scripts-to-alter-service-state\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;SCCM Compliance Settings Scripts to Alter Service State&#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":[5,4,14,13],"tags":[9,7,8,11,12],"class_list":["post-57","post","type-post","status-publish","format-standard","hentry","category-dcm","category-configmgr","category-powershell","category-scripting","tag-compliance-settings","tag-configmgr","tag-dcm","tag-powershell","tag-services"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p98a2r-V","post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/posts\/57","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=57"}],"version-history":[{"count":2,"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/posts\/57\/revisions"}],"predecessor-version":[{"id":99,"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/posts\/57\/revisions\/99"}],"wp:attachment":[{"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/media?parent=57"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/categories?post=57"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/michaelschultz.net\/tech\/wp-json\/wp\/v2\/tags?post=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}