C#で出来るものをPowerShellで書く
C#実装できたものをPowerShellでもやってみる
プログラム
主な動作
-
*.mp3
に前方部分一致したファイルの一覧を表示する
動作条件と検索対象
- コマンドライン引数の
第1個目の引数
を検索対象のディレクトリ場所とする - コマンドライン引数が無い場合は,
My Musicフォルダ
から検索する
C#
SearchMP3.cs
using System;
using System.IO;
namespace SearchMP3
{
class Program
{
/// <summary>
/// "*.mp3" ファイルを検索し表示
/// </summary>
/// <param name="args">コマンドライン引数</param>
/// <example>ディレクトリにファイルが存在した場合はコンソールに表示</example>
static void Main(string[] args)
{
string path = null;
if (args.Length == 1)
{
// コマンドライン引数があるとき
path = args[0];
}
else
{
// コマンドライン引数がないとき
path = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
}
// *.mp3に一致するファイルの取得
string[] files = Directory.GetFiles(path, "*.mp3", SearchOption.AllDirectories);
// ファイルパスの出力
foreach (string file in files)
{
Console.WriteLine(file);
}
}
}
}
PowerShell
プログラム
SearchMP3.ps1
<#
.SYNOPSIS
"*.mp3" ファイルを検索し表示
.DESCRIPTION
コマンドライン引数に指定したディレクトリのファイルが存在した場合はコンソールとウィンドウに表示
#>
if ($Local:args.Length -eq 1) {
# コマンドライン引数
$Local:path = $args[0]
} else {
# MyMusicフォルダ
$Local:path = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::MyMusic)
}
$Local:files = [System.IO.Directory]::GetFiles($Local:path, "*.mp3", [System.IO.SearchOption]::AllDirectories);
# コンソール出力
$Local:files | Write-Output
# 画面出力
$Local:files | Out-GridView -Title "*.mp3のファイル一覧"
PowerShellファイルの実行方法
C:\
のフォルダから検索するには以下のようにして実行
PowerShell
> .\SearchMp3.ps1 "C:\"
実行できないとき
以下のサイトが参考になります。
http://qiita.com/tomoko523/items/df8e384d32a377381ef9
要するに、PowerShellの実行ポリシーを変更すればOK!
PowerShell(管理者権限で実行)
> Set-ExecutionPolicy RemoteSigned
2018/10/13 追記
管理者権限が不要で、ユーザー単位で実行ポリシーを変更できる方法があるようです。
詳しくは、本記事のコメントを参照ください。