Edited at

C#とPowerShellで遊ぶ

More than 1 year has passed since last update.


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 追記

管理者権限が不要で、ユーザー単位で実行ポリシーを変更できる方法があるようです。

詳しくは、本記事のコメントを参照ください。