-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy path1042.html
More file actions
282 lines (264 loc) · 10.7 KB
/
1042.html
File metadata and controls
282 lines (264 loc) · 10.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="PoshCode - Community resources for PowerShell coders">
<meta name="author" content="cz9qvh">
<title>pslauncher - PoshCode</title>
<link rel="stylesheet" href="https://poshcode.org/css/superhero.min.css">
<link rel="stylesheet" href="https://poshcode.org/css/main.css">
<link rel="stylesheet" href="https://poshcode.org/css/highlight/arta.css">
<style>
body {
padding-top: 50px;
padding-bottom: 20px;
}
</style>
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm fixed-top navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="https://PoshCode.org/">PoshCode</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div id="navbarResponsive" class="collapse navbar-collapse navbar-responsive-collapse navbar-right">
<ul class="nav navbar-nav nav-tabs ml-auto" id="tabs">
<li class="nav-item"><a class="nav-link" href="https://poshcode.org/">Join Us!</a></li>
<li class="nav-item"><a class="nav-link active show" href="https://poshcode.org/scripts" data-toggle="tab">Scripts</a></li>
<li class="nav-item"><a class="nav-link" href="https://poshcode.org/video">Videos</a></li>
</ul>
</div><!--/.navbar-collapse -->
</div>
</nav>
</header>
<div class="container">
<div class="blog-header">
<h1 class="blog-title">PoshCode</h1>
<p class="lead blog-description">Community resources for PowerShell coders</p>
</div>
<div class="row">
<div class="blog-post">
<h2 class="blog-post-title">pslauncher</h2>
<p class="blog-post-meta">
<span class="blog-post-time">2009-04-17</span> by <a class="blog-post-author">cz9qvh</a>
</p>
<h3>Download <a href="https://poshcode.org/scripts/1042.ps1">pslauncher.ps1</a></h3>
<p>Requires V2</p>
<pre><code class="language-powershell">/*
* Compile this program by simply doing:
*
* csc.exe PSLauncher.cs
*
*/
// Requires powershell V2
/*
* The Problem:
* .ps1 scripts do not integrate with the shell nicely. You cannot
* simply associate powershell.exe with .ps1 and have them run when u
* double click them. Also, the execution of script you click on may
* be blocked by security policies. Thirdly, some powershell scripts
* require ps to be launched with some command line arguments, to frequently
* run such a script then requires keyboard entry or awkward batch files.
*
* The Solution:
* Compile this program, and associate it as the default launcher for .ps1.
* follow the usage details below, and you will be able to launch .ps1 scripts
* from the shell with mouse alone, and as added benafit you get to put
* ps cmd line options in your script, and you can run scripts invisible.
*
* USAGE:
* Put the first two characters of your script as "#!"
* Follow that with the full path to powershell.exe (incl fname) or
* if powershell.exe is in the path you can just put #!powershell.exe
*
* The remainder part of that line will be passed to powershell.exe as
* arguments. For example, -STA. The filename of the script is also
* passed as "-file %1" along with "-ExecutionPolicy UnRestricted".
*
* The second line of the file, if it is prefixed by "#-" can contain "meta arguments"
* for powershell. Currently the only one allowed is "Hidden" which will supress the
* powershell window and discard any output from the script.
*
* If a .ps1 script without these magics #! is encountered, it will be passed
* to powershell.exe as above, if powershell.exe is in the path or default location.
*
* Example:
* #!powershell.exe -STA
* #-Hidden
* ...rest of script...
*
*
* or
*
*
* #!C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -noexit
* ...rest of a script you don't want to exit when it ends...
*/
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
namespace PSLauncher
{
static class PSLauncher
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string [] args)
{
if (args.Length != 1)
{
throw new ArgumentException("Wrong number of arguments, there must be exactly one.");
}
if (!(new Regex(".ps1$")).Match(args[0]).Success)
{
psl_err("Must have extension of ps1 or powershell.exe will error.");
return;
}
StreamReader fs;
string line_1;
string line_2;
string exe_path;
string cmd_line;
string ps_args;
Regex r;
Match m;
bool hidden = false;
Process ps_proc;
try
{
fs = new StreamReader(args[0]);
}
catch (FileNotFoundException)
{
psl_err("File Not Found.");
return;
}
catch (FileLoadException)
{
psl_err("File found but could not be loaded.");
return;
}
try
{
line_1 = fs.ReadLine();
line_2 = fs.ReadLine();
}
catch (IOException)
{
psl_err("File may not have enough lines.");
return;
}
fs.Close();
r = new Regex(@"^#!(.*)powershell\.exe");
exe_path = "";
if ((m = r.Match(line_1)).Success)
{
line_1 = r.Replace(line_1, "");
exe_path = m.Groups[1].Value;
if (exe_path != "")
{
if (!File.Exists(exe_path + "powershell.exe"))
{
psl_err("specified powershell.exe file not exist.");
}
}
else
{
exe_path = find_powershell();
if (exe_path == "")
{
psl_err("powershell.exe is not found.");
return;
} } }
else
{
line_1 = "";
exe_path = find_powershell();
if (exe_path == "")
{
psl_err("powershell.exe is not found.");
return;
} }
cmd_line = exe_path + "\\" + "powershell.exe";
ps_args = line_1 + " -ExecutionPolicy UnRestricted -File \"" + args[0] + "\"";
r = new Regex("^#-");
if ((m = r.Match(line_2)).Success)
{
line_2 = r.Replace(line_2, "");
if ((new Regex("Hidden")).Match(line_2).Success)
{
hidden = true;
} }
ps_proc = new Process();
if (hidden)
{
ps_proc.StartInfo.RedirectStandardError = true;
ps_proc.StartInfo.RedirectStandardInput = true;
ps_proc.StartInfo.RedirectStandardOutput = true;
ps_proc.StartInfo.CreateNoWindow = true;
ps_proc.StartInfo.UseShellExecute = false;
}
ps_proc.StartInfo.Arguments = ps_args;
ps_proc.StartInfo.FileName = cmd_line;
ps_proc.Start();
}
private static void psl_err(string msg)
{
MessageBox.Show(msg, "PSLauncher Critical Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
private static string find_powershell()
{
string exe_path = "";
foreach (string test_path in
Environment.GetEnvironmentVariable("Path").Split(';'))
{
if (File.Exists(test_path + "\\" + "powershell.exe"))
exe_path = test_path;
}
if (exe_path == "" && File.Exists(
"C:\\WINDOWS\\system32\\windowspowershell\\v1.0\\powershell.exe"))
exe_path = "C:\\WINDOWS\\system32\\windowspowershell\\v1.0\\powershell.exe";
return exe_path;
} } }
</code></pre>
</div>
<!-- sidebar? -->
</div>
<hr>
<footer class="blog-footer">
<p>Generated by Joel "Jaykul" Bennett - 2018</p>
</footer>
</div> <!-- /container -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
crossorigin="anonymous"></script>
<script src="/js/main.js"></script>
<script src="/js/vendor/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-59988721-1', 'auto');
ga('send', 'pageview');
$(function () {
$('#contentTabs a:first').tab('show')
})
</script>
</body>
</html>