{"id":345,"date":"2026-10-13T17:51:01","date_gmt":"2026-10-13T17:51:01","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2013\/09\/25\/to-assign-computer-startup-scripts\/"},"modified":"2026-10-13T17:51:01","modified_gmt":"2026-10-13T17:51:01","slug":"to-assign-computer-startup-scripts","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/to-assign-computer-startup-scripts\/","title":{"rendered":"How to Assign Computer Startup Scripts with Group Policy (Local and Domain GPO)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Computer startup scripts let administrators run tasks automatically when Windows boots, before users begin normal work. This guide is for IT and DevOps teams managing Windows endpoints and explains how to assign startup scripts in both local and domain Group Policy, with verification steps you can use immediately.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2013-09-25; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This article expands the original note at <a href=\"https:\/\/www.devopsschool.com\/blog\/to-assign-computer-startup-scripts\/\">devopsschool.com<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2013\/09\/computer-startup-scripts.png\" alt=\"Group Policy startup scripts configuration\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Choose the right Group Policy scope first<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can assign startup scripts either in <strong>Local Group Policy<\/strong> (single machine) or in a <strong>Domain Group Policy Object (GPO)<\/strong> (many machines). The configuration area is conceptually the same: <strong>Computer Configuration &gt; Windows Settings &gt; Scripts (Startup\/Shutdown)<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Scope<\/th><th>Console path<\/th><th>Launch command<\/th><th>Best for<\/th><\/tr><\/thead><tbody><tr><td>Local Group Policy<\/td><td>Local Computer Policy &gt; Computer Configuration &gt; Windows Settings &gt; Scripts (Startup\/Shutdown)<\/td><td><code>gpedit.msc<\/code><\/td><td>One machine, testing, break-fix changes<\/td><\/tr><tr><td>Domain GPO<\/td><td>GPO &gt; Computer Configuration &gt; Windows Settings &gt; Scripts (Startup\/Shutdown)<\/td><td><code>gpmc.msc<\/code><\/td><td>Centralized rollout to many domain-joined computers<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Assign a computer startup script step by step<\/h2>\n\n\n\n<ol class=\"wp-block-list\"><li>Open the Group Policy editor for your target scope.<\/li><li>In the console tree, go to <strong>Scripts (Startup\/Shutdown)<\/strong> under <strong>Computer Configuration &gt; Windows Settings<\/strong>.<\/li><li>In the details pane, open <strong>Startup<\/strong>.<\/li><li>In <strong>Startup Properties<\/strong>, click <strong>Add<\/strong>.<\/li><li>In <strong>Add a Script<\/strong>, set <strong>Script Name<\/strong> (path to the script, or browse for it) and optional <strong>Script Parameters<\/strong>.<\/li><li>Use <strong>Up<\/strong> and <strong>Down<\/strong> to control execution order when multiple scripts are assigned, then click <strong>OK<\/strong>.<\/li><\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-batch\"><span class=\"hljs-selector-tag\">gpedit<\/span><span class=\"hljs-selector-class\">.msc<\/span>\n<span class=\"hljs-selector-tag\">gpmc<\/span><span class=\"hljs-selector-class\">.msc<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">From the original procedure: you can browse for scripts in the domain controller Netlogon share, and pass parameters exactly as you would on the command line (example: <code>\/\/logo \/\/I<\/code>).<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Startup Properties option<\/th><th>What it does<\/th><\/tr><\/thead><tbody><tr><td>Add<\/td><td>Assigns another startup script to the GPO<\/td><\/tr><tr><td>Edit<\/td><td>Updates selected script name or parameters<\/td><\/tr><tr><td>Remove<\/td><td>Unassigns selected script<\/td><\/tr><tr><td>Show Files<\/td><td>Opens the storage location for scripts tied to the selected GPO<\/td><\/tr><tr><td>Up \/ Down<\/td><td>Changes execution order for multiple startup scripts<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Workflow from assignment to execution<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Open policy editor] --> B[Go to Scripts Startup Shutdown]\n    B --> C[Open Startup Properties]\n    C --> D[Add script path and parameters]\n    D --> E[Set script order]\n    E --> F[Apply policy]\n    F --> G[Restart computer]\n    G --> H{Script ran as expected}\n    H -- no --> I[Check script path and permissions]\n    H -- yes --> J[Keep policy documented]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Example startup script and validation commands<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A simple startup script can write a timestamp so you can confirm it executed at boot.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-batch\"><span class=\"hljs-keyword\">@echo<\/span> off\necho Startup script ran on %COMPUTERNAME% at %DATE% %TIME% &gt;&gt; <span class=\"hljs-attribute\">C:<\/span>\\Windows\\Temp\\startup-script.log<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">After assigning the script, force policy refresh and reboot for a quick test cycle.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-batch\">gpupdate \/force\nshutdown \/r \/t 0<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Common pitfalls and best practices<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Use clear naming for scripts and keep parameter usage documented in the GPO description.<\/li><li>When multiple scripts are assigned, verify execution order with <strong>Up<\/strong>\/<strong>Down<\/strong> before rollout.<\/li><li>Keep script paths stable and accessible from target computers.<\/li><li>Test on a small OU or pilot system before broad deployment.<\/li><li>After changes, always validate with a policy refresh and reboot test.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Learn the exact steps to assign computer startup scripts through Group Policy, including where to configure them, how script order works, and how to validate deployment. This guide expands the original quick tip into a practical, production-ready reference.<\/p>\n","protected":false},"author":1,"featured_media":3745,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[57],"tags":[2300,2301,2303,2305,1122,545,1806,593,2302,354,2304,732,213],"class_list":["post-345","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-assign","tag-computer","tag-computer-startup-scripts","tag-create-system-startup","tag-guide","tag-how","tag-instruction","tag-process","tag-scripts","tag-startup","tag-startup-scripts","tag-steps","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=345"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/345\/revisions"}],"predecessor-version":[{"id":79215,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/345\/revisions\/79215"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3745"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}