<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://powershell.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results for 'app:weblogs' matching tag 'scheduled task'</title><link>http://powershell.com/cs/search/SearchResults.aspx?q=app:weblogs&amp;tag=scheduled+task&amp;orTags=0&amp;o=DateDescending</link><description>Search results for 'app:weblogs' matching tag 'scheduled task'</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 (Build: 30929.2835)</generator><item><title>SQL Saturday 129 Session Material</title><link>http://powershell.com/cs/blogs/lonelyadministrator/archive/2012/05/14/sql-saturday-129-session-material.aspx</link><pubDate>Mon, 14 May 2012 05:00:00 GMT</pubDate><guid isPermaLink="false">f421715f-7aba-45f0-8a8d-44de5318a3a7:16524</guid><dc:creator>Anonymous</dc:creator><description>
I spoke this past weekend at a SQL Saturday event in Rochester, NY. My first SQL Saturday event and it was a lot of fun. A great turnout and some very interested attendees. I did three PowerShell sessions on jobs, &amp;#8230; &lt;a href="http://jdhitsolutions.com/blog/2012/05/sql-saturday-129-session-material/"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description></item><item><title>Regular Users Running Admin Scripts (Safe)</title><link>http://powershell.com/cs/blogs/tobias/archive/2010/10/28/regular-users-running-admin-scripts-safe.aspx</link><pubDate>Thu, 28 Oct 2010 05:00:00 GMT</pubDate><guid isPermaLink="false">f421715f-7aba-45f0-8a8d-44de5318a3a7:8028</guid><dc:creator>Tobias</dc:creator><description>&lt;p&gt;In &lt;a target="_blank" href="http://powershell.com/cs/blogs/tobias/archive/2010/10/22/encrypting-passwords.aspx"&gt;Part 1&lt;/a&gt; and &lt;a target="_blank" href="http://powershell.com/cs/blogs/tobias/archive/2010/10/25/encrypting-passwords-in-powershell-part-2.aspx"&gt;Part 2&lt;/a&gt;, we looked at various ways how to embed a password in your scripts so that the script could access privileged things. A typical example would be a regular user that needed to do some admin stuff.&lt;/p&gt;
&lt;p&gt;The problem of course is that all of these approaches can only &amp;quot;obfuscate&amp;quot; the password, but it is still in your scripts. A smart and knowledgeable PowerShell user &lt;strong&gt;could still retrieve and abuse&lt;/strong&gt; it. At first glance, there seems to be no safer way because Windows operating systems cannot assign &amp;quot;execute only&amp;quot; privileges. Execution always includes the right to read.&lt;/p&gt;
&lt;h2&gt;Use an &amp;quot;Escrow Agent&amp;quot; to elevate scripts&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;only safe way&lt;/strong&gt; for regular users to launch something elevated would be to &lt;strong&gt;not give them the admin password&lt;/strong&gt;. Instead, you would need someone else, an escrow agent. This escrow agent would be a neutral authority. You could approach him and tell him the admin password secret and the script to launch. A regular user could also approach the escrow agent and tell him to launch the script. The escrow agent would do what both parties want but never reveal the secret to the regular user.&lt;/p&gt;
&lt;h2&gt;Scheduled Tasks: Secure Way to Elevation&lt;/h2&gt;
&lt;p&gt;There is already such an escrow agent: &lt;strong&gt;scheduled tasks&lt;/strong&gt;! You can create a scheduled task and specify that the task should run under an Admin account and use maximum privileges. Then, someone else could trigger that task. However, Windows would not allow a regular user to launch a privileged task. You would get an &amp;quot;access denied&amp;quot;. The real trick is to &lt;strong&gt;trigger&lt;/strong&gt; the scheduled task &lt;strong&gt;by a system event&lt;/strong&gt;. It is much easier than you may think. &lt;/p&gt;
&lt;p&gt;This is what an Admin needs to do to set up such a task:&lt;/p&gt;
&lt;p&gt;1. Create a PowerShell script that needs to be run as admin by a regular user&lt;br /&gt;2. Secure that script with approproate NTFS privs so that a regular user cannot change it&lt;br /&gt;3. Create a scheduled task that runs the script on behalf of a privileged account&lt;br /&gt;4. Assign maximum privileges to that task&lt;br /&gt;5. Assign an event trigger that launches the task on a specific event log entry&lt;/p&gt;
&lt;p&gt;Then, the regular user could launch that task safely as admin by adding the required event log entry, for example by using Write-EventLog. That&amp;#39;s a perfect way of launching elevated scripts because you also get a great logging who elevated when.&lt;/p&gt;
&lt;h2&gt;Autogenerate Scheduled Tasks&lt;/h2&gt;
&lt;p&gt;I wrote a function called &lt;strong&gt;Create-ScheduledTask&lt;/strong&gt; which will automate all the steps above. I wrote it on Windows 7 so you may adjust some details on XP. You can download the script here: &lt;a href="http://powershell.com/cs/media/p/8026.aspx"&gt;http://powershell.com/cs/media/p/8026.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Create-ScheduledTask&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;param&lt;/span&gt;&lt;/span&gt;(&lt;br /&gt;[Parameter(Mandatory&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$true&lt;/span&gt;&lt;/span&gt;)]&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ScriptPath&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;[Parameter(Mandatory&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$true&lt;/span&gt;&lt;/span&gt;)]&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$UserName&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$UserDomain&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$env:userdomain&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;[Parameter(Mandatory&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$true&lt;/span&gt;&lt;/span&gt;)]&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$Password&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;[&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;switch&lt;/span&gt;&lt;/span&gt;]&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EnableNTFSSecurity&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EventLogName&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;PowerShell Elevation&amp;#39;&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EventSource&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;RunElevated&amp;#39;&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EventID&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; 999,&lt;br /&gt;[&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;switch&lt;/span&gt;&lt;/span&gt;]&lt;br /&gt;&lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$CreateEventLog&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# COPYRIGHT by Dr. Tobias Weltner&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# All Rights Reserved.&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# Documentation and details here:&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# http://powershell.com/cs/blogs/tobias/&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# you can freely use and change this script provided you keep a reference to the original author and the blog URL&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# if you live in Europe and would like to set up an inhouse PowerShell training with me,&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# drop me a line: tobias.weltner@scriptinternals.de&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;# THIS SCRIPT NEEDS LOCAL ADMIN PRIVS TO SET UP SCHEDULED TASKS&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# the tasks scheduled by this script can then be run by anyone&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# in the context of the person you specified&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;# create a unique taskname:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$taskname&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; [&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Guid&lt;/span&gt;&lt;/span&gt;]::&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;NewGUID&lt;/span&gt;&lt;/span&gt;().&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;Guid&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$user&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;quot;$userdomain\$username&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# does script exist?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; ((&lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Test-Path&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ScriptPath&lt;/span&gt;&lt;/span&gt;) &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-eq&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$false&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;Throw &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;quot;Script &amp;#39;$ScriptPath&amp;#39; not found.&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# start task scheduler if not started already:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; ((&lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-Service&lt;/span&gt;&lt;/span&gt; Schedule).&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Status&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-ne&lt;/span&gt;&lt;/span&gt; 4) {&lt;br /&gt;&lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Start-Service&lt;/span&gt;&lt;/span&gt; Schedule &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ErrorAction&lt;/span&gt;&lt;/span&gt; Stop&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# make sure script is NTFS protected&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# we assign full privs to both administrators and the account&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# the script is run by task scheduler&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# all inherited and other privs are removed:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$enableNTFSSecurity&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$result&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;icacls.exe&lt;/span&gt;&lt;/span&gt; (&lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;&amp;quot;{0}&amp;quot; /reset&amp;#39;&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-f&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ScriptPath&lt;/span&gt;&lt;/span&gt;) 2&amp;gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;1&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$LASTEXITCODE&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-ne&lt;/span&gt;&lt;/span&gt; 0) {&lt;br /&gt;Throw &lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$result&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$result&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;icacls.exe&lt;/span&gt;&lt;/span&gt; (&lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;&amp;quot;{0}&amp;quot; /inheritance:r /grant:r {1}:F Administrator:F&amp;#39;&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-f&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ScriptPath&lt;/span&gt;&lt;/span&gt;, &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$user&lt;/span&gt;&lt;/span&gt;) 2&amp;gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;1&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$LASTEXITCODE&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-ne&lt;/span&gt;&lt;/span&gt; 0) {&lt;br /&gt;Throw &lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$result&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# Make sure the triggering eventlog and source exist:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$CreateEventLog&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (([&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Diagnostics.EventLog&lt;/span&gt;&lt;/span&gt;]::&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Exists&lt;/span&gt;&lt;/span&gt;(&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EventLogName&lt;/span&gt;&lt;/span&gt;)&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-eq&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$false&lt;/span&gt;&lt;/span&gt;) &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-or&lt;/span&gt;&lt;/span&gt; ([&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Diagnostics.EventLog&lt;/span&gt;&lt;/span&gt;]::&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;SourceExists&lt;/span&gt;&lt;/span&gt;(&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EventSource&lt;/span&gt;&lt;/span&gt;) &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-eq&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$false&lt;/span&gt;&lt;/span&gt;)) {&lt;br /&gt;try {&lt;br /&gt;&lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;New-EventLog&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EventLogName&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Source&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EventSource&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ErrorAction&lt;/span&gt;&lt;/span&gt; Stop | &lt;span style="color:#5f9ea0;"&gt;&lt;span class="verbnoun"&gt;Out-Null&lt;/span&gt;&lt;br /&gt;&lt;span class="verbnoun"&gt;Write-EventLog&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EventLogName&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Source&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EventSource&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-EventID&lt;/span&gt;&lt;/span&gt; 0 &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-EntryType&lt;/span&gt;&lt;/span&gt; Information &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Message&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;Created&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;catch {&lt;br /&gt;Throw &lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$_&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# create the scheduled task on behalf of the user specified&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$r1&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; schtasks &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;CREATE &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;RU &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$user&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;RP &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$password&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;TR &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;quot;powershell.exe -noprofile -nologo -executionpolicy Bypass -file &amp;quot;&amp;quot;$ScriptPath&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;TN &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$taskname&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;EC &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$EventLogName&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;SC OnEvent &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;MO &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;quot;*[System[Provider[@Name=&amp;#39;$EventSource&amp;#39;] and EventID=$EventID]]&amp;quot;&lt;/span&gt;&lt;/span&gt; 2&amp;gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;1&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$r2&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; schtasks &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;CHANGE &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;RU &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$user&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;RP &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$password&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;TN &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$taskname&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;/&lt;/span&gt;&lt;/span&gt;RL Highest 2&amp;gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;1&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$LASTEXITCODE&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-eq&lt;/span&gt;&lt;/span&gt; 0) {&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;quot;Successfully created scheduled task &amp;#39;$taskname&amp;#39;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="string"&gt;&amp;quot;The scheduled task will fail to run if the machine is on battery power. Adjust scheduled task manually to change this behavior.&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="string"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="string"&gt;&amp;quot;Non-elevated users can run this task on behalf of $user with this code:&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="string"&gt;&amp;quot;Write-EventLog $EventLogName -source $EventSource -EventID $EventID -message &amp;#39;ElevationTask triggered&amp;#39; -EntryType Information&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="string"&gt;&amp;quot;On Windows 7/Server 2008R2, this line is in your clipboard now, too.&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;try { &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;quot;Write-EventLog $EventLogName -source $EventSource -EventID $EventID -message &amp;#39;ElevationTask triggered&amp;#39; -EntryType Information&amp;quot;&lt;/span&gt;&lt;/span&gt; | clip } catch { }&lt;br /&gt;} &lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;quot;Creating scheduled task failed:&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$r1&lt;/span&gt;&lt;br /&gt;&lt;span class="var"&gt;$r2&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# Sample call&lt;/span&gt;&lt;br /&gt;
&lt;p&gt;&lt;span class="comment"&gt;&lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Create-ScheduledTask&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ScriptPath&lt;/span&gt;&lt;/span&gt; c:\scripts\&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;elevatedscript.ps1&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-EnableNTFSSecurity&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-UserName&lt;/span&gt;&lt;/span&gt; Tobias &lt;br /&gt;&lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Password&lt;/span&gt;&lt;/span&gt; t0pSeCR3t &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-EventLogName&lt;/span&gt;&lt;/span&gt; PSElevation &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-EventSource&lt;/span&gt;&lt;/span&gt; ScriptLaunch &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-EventID&lt;/span&gt;&lt;/span&gt; 776 &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-CreateEventLog&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;When you run &lt;strong&gt;Create-ScheduledTask&lt;/strong&gt;, you can submit a user name and password. You can also specify an event log, an event id and an event source name. Just make sure the eventlog you specify is writeable to regular users. You can of course specify your very own eventlog. It does not need to exist yet.&lt;/p&gt;
&lt;p&gt;The script then &lt;strong&gt;protects&lt;/strong&gt; your script with appropriate &lt;strong&gt;NTFS&lt;/strong&gt; access (since it runs as admin, you do not want users to change it later). It creates the eventlog and eventsource if missing. It creates the scheduled task and sets it up appropriately. And it &lt;strong&gt;autogenerates&lt;/strong&gt; the &lt;strong&gt;line of code&lt;/strong&gt; a normal user would need to trigger the scheduled script. That&amp;#39;s the line you&amp;#39;d hand out to your regular users. The elevation launch is triggered by a highly specific entry in one specific eventlog. Only the correct combination of eventlog, source and id will trigger.&lt;/p&gt;
&lt;div class="pscode"&gt;&lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Write-EventLog&lt;/span&gt;&lt;/span&gt; PSElevation &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-source&lt;/span&gt;&lt;/span&gt; ScriptLaunch &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-EventID&lt;/span&gt;&lt;/span&gt; 776 &lt;/div&gt;
&lt;div class="pscode"&gt;&lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-message&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;ElevationTask triggered&amp;#39;&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-EntryType&lt;/span&gt;&lt;/span&gt; Information&lt;/div&gt;
&lt;p&gt;They could then launch the script, and the script would run under the account of the person you specified when you scheduled it. The &lt;strong&gt;regular users&lt;/strong&gt; would &lt;strong&gt;not need to know any passwords&lt;/strong&gt;, and they would &lt;strong&gt;not be able to actually see or change the script&lt;/strong&gt; because they don&amp;#39;t know where it is located, and the script is NTFS protected as well. The logfile used to trigger the elevated launch &lt;strong&gt;maintains a nice log&lt;/strong&gt; of who elevated when what.&lt;/p&gt;
&lt;p&gt;Note that the scheduled task is set up in a way that will prevent launches when a system is on &lt;strong&gt;battery power&lt;/strong&gt;. If you must run elevated scripts on the road as well, make sure you change the settings of the scheduled task which you can do manually in control panel or programmatically using schtasks.exe. Changing the battery launch option is not surfaced by a switch in &lt;strong&gt;schtasks.exe&lt;/strong&gt;, though. You would need to use schtasks to get the XML definition of the task, change the setting and then write the XML back using schtasks.exe. I did not want to go through that hassle because I need to go now.&lt;/p&gt;
&lt;p&gt;If anyone happens to be at &lt;strong&gt;TechEd 2010 in Berlin&lt;/strong&gt; in November, let me know! We could meet and have fun! Or pass by one of the PowerShell sessions or the Idera booth. We&amp;#39;ll have exciting activity there...!&lt;/p&gt;
&lt;p&gt;Tobias&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Microsoft MVP PowerShell Germany&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;P.S.&lt;br /&gt;If you live in Germany or other parts of Europe and your company would like to set up a truly great PowerShell training, just contact me! I regularly train mid- to large-size companies. Trainings are always a blast with tons of real-world-examples and solutions. Here&amp;#39;s how to get in touch with me: &lt;a href="mailto:tobias.weltner@scriptinternals.de"&gt;&lt;span style="color:#3366cc;"&gt;tobias.weltner@scriptinternals.de&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>