▼ ps.bat ( PowerShell をそのまま使えない場合は以下のバッチファイルを作成して使用します )
@powershell -NoProfile -ExecutionPolicy Unrestricted "./%1.ps1"
▼ build.ps1
Add-Type -path "wget.cs" `
-ReferencedAssemblies System.Web, System.Windows.Forms `
-OutputAssembly my_wget.exe `
-OutputType ConsoleApplication
Read-Host "何かキーを押してください"
wget.cs は、wget.ps1 と同じフォルダにあります
` で継続行指定です。
System.Web, System.Windows.Forms という感じで複数の指定を行っています
▼ wget.cs
第一引数に渡した URL をダウンロードします。
Environment.GetCommandLineArgs() の結果には、自分自身が含まれています。
よって、param[1] と args[0] が同じ内容になります。( 後述の PowerShell から実行した場合は、param には PowerShell への引数がセットされます )
Visual Studio で追加参照が必要なクラスが -ReferencedAssemblies の対象です
using System;
using System.IO;
using System.Net;
using System.Web;
using System.Windows.Forms;
public class Program
{
public static void Main(string[] args)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
string[] param = Environment.GetCommandLineArgs();
if (param.Length > 1)
{
Console.WriteLine( string.Format("第一引数 : {0}", param[1]) );
Console.WriteLine(string.Format("第一引数 : {0}", args[0]));
}
else
{
MessageBox.Show("ダウンロードする URL を引数に指定して下さい");
Environment.Exit(0);
}
string localFileName = Path.GetFileName(param[1]);
Console.WriteLine(string.Format("ファイル名 : {0}", localFileName));
using( WebClient wc = new WebClient() ) {
wc.DownloadFile( param[1], localFileName );
}
// *******************************************
// -ReferencedAssemblies の複数テスト用
// *******************************************
string percent_encoding = HttpUtility.UrlEncode(param[1]);
Console.WriteLine( percent_encoding );
MessageBox.Show("処理が終了しました");
}
}
MessageBox.Show
HttpUtility.UrlEncode
▼ 実行用バッチファイルのサンプル
my_wget.exe https://winofsql.jp/image/planet.jpg
▼ 実行結果の表示
C:\user\ps\cs>my_wget.exe http://winofsql.jp/image/planet.jpg
第一引数 : http://winofsql.jp/image/planet.jpg
第一引数 : http://winofsql.jp/image/planet.jpg
ファイル名 : planet.jpg
http%3a%2f%2fwinofsql.jp%2fimage%2fplanet.jpg
この後、メッセージボックスが表示されます
PowerShell として exe なしで実行する場合
▼ run.ps1
実行
スクリプトセットのダウンロード
関連するドキュメント
Read-Host コマンドレットの使用
Add-Type