PowerShellユーティリティメソッド

Utilメソッド

【改訂新版】 Windows PowerShell ポケットリファレンス

【改訂新版】 Windows PowerShell ポケットリファレンス

################################################################################
# Utility.ps1
################################################################################
################################################################################
# 機能:ファイルのエンコーディングを変換します
# 引数:$inputPath - 入力ファイルパス
#     :$inputEncoding - 入力ファイルエンコーディング
#     :$outputPath - 出力ファイルパス
#     :$outputEncoding - 出力ファイルエンコーディング
# 返値:なし
# 備考:(例1)ConvertTextEncoding "C:\utf8_memo.txt" "UTF8" "C:\utf8_memo-cnv_sjis.txt" "String"
#     :(例2)ConvertTextEncoding "C:\sjis_memo.txt" "String" "C:\sjis_memo-cnv_utf8.txt" "UTF8"
################################################################################
function ConvertTextEncoding($inputFile,
	[Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]$inputEncoding,
	$outputFile, 
	[Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]$outputEncoding
)
{
	Get-Content -Encoding $inputEncoding $inputFile | Set-Content -Encoding $outputEncoding $outputFile
}

################################################################################
# 機能:指定したパスのファイル一覧を返します
# 引数:$path - パス
#     :$extension - 拡張子
#     :$recurse - 再帰設定("recurse"を設定すると再帰的に取得する)
# 返値:ファイル一覧
# 備考:(例1)GetFiles "C:\Users\shin.suzuki\Desktop\" ".pl"
#     :(例2)GetFiles "C:\Users\shin.suzuki\Desktop\" ".pl" "recurse"
################################################################################
function GetFiles($path, $extension, $recurse="")
{
	$genericList = 'System.Collections.Generic.List`1[System.String]'
	$list = New-Object $genericList
		
	if($recurse -eq "recurse"){
		foreach ($file in Get-ChildItem -Recurse -File -Path $path | Where-Object{ $_.Extension.ToLower() -eq $extension} | Sort-Object Name){
			$list.Add(($file).fullname)
		}

	}else{
		foreach ($file in Get-ChildItem -File -Path $path | Where-Object{ $_.Extension.ToLower() -eq $extension} | Sort-Object Name){
			$list.Add(($file).fullname)
		}
	}
	
	return @($list)
}

################################################################################
# 機能:指定したファイルの内容を配列として返します
# 引数:$filePath - ファイル
#     :$encoding - エンコーディング
# 返値:行配列
# 備考:(例1)$lines = ReadFile "C:\Users\shin.suzuki\Desktop\test.txt"
#     :(例2)$lines = ReadFile "C:\Users\shin.suzuki\Desktop\test2.txt" "String"  
################################################################################
function ReadFile($filePath, 
	[Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]$encoding="UTF8"
	)
{
	$lines = @(Get-Content -Path $filePath -Encoding $encoding)
	return $lines
}

################################################################################
# 機能:指定したファイルへ配列の内容を書き込みます
# 引数:$filePath - ファイル
#     :$lines - 行配列
#     :$encoding - エンコーディング
# 返値:行配列
# 備考:(例1)WriteFile "C:\Users\shin.suzuki\Desktop\test3.txt" $lines
#     :(例2)WriteFile "C:\Users\shin.suzuki\Desktop\test4.txt" $lines "String"  
################################################################################
function WriteFile($filePath, $lines, 
	[Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]$encoding="UTF8")
{
	foreach($line in $lines){
		Add-Content -Path $filePath -Value $line -Encoding $encoding
	}
}

################################################################################
# 機能:指定したCSVファイルの内容を配列として返します
# 引数:$csvFilePath - ファイル
#     :$lines - 行配列
#     :$headers - ヘッダ項目配列
#     :$encoding - エンコーディング
# 返値:行配列
# 備考:(例1)$datas = ReadCsvFile "C:\Users\shin.suzuki\Desktop\csv_data2.csv" "" "UTF8"
#     :(例2)$headers = @(0,1,2,3,4);	#1行目がヘッダ部ではない場合
#     :     $datas = ReadCsvFile "C:\Users\shin.suzuki\Desktop\csv_data3.csv" $headers "UTF8"
#     :(例3)$datas = ReadCsvFile "C:\Users\shin.suzuki\Desktop\csv_data2.csv" "" "Default"
#     :(例4)$headers = @(0,1,2,3,4);	#1行目がヘッダ部ではない場合
#     :     $datas = ReadCsvFile "C:\Users\shin.suzuki\Desktop\csv_data4_sjis.csv" $headers "Default"
# 備考:色々処理したあとのCSV出力は手で作成後に、WriteFileで出力対応とする。
################################################################################
function ReadCsvFile($csvFilePath, $headers="", 
	[Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]$encoding="UTF8")
{
	if($headers -eq ""){
		Write-Host $headers
		$datas = Import-Csv -Path $csvFilePath -Encoding $encoding
	}else{
		Write-Host $headers
		$datas = Import-Csv -Path $csvFilePath -Encoding $encoding -Header $headers
	}
	
	return $datas
}


################################################################################
# 機能:ファイルを作成します
# 引数:$path - パス
#     :$fileName - ファイル名
# 返値:なし
# 備考:(例1)CreateFile "c:\" "test.txt" "force"
#     :(例2)CreateFile "c:\" "test.txt"
################################################################################
function CreateFile($path, $fileName, $force="")
{
	if($force -eq "force"){
		New-Item -Name $fileName -ItemType File -Path $path -Force
	}else{
		New-Item -Name $fileName -ItemType File -Path $path
	}	
}

################################################################################
# 機能:ディレクトリを作成します
# 引数:$path - パス
#     :$dirName - ディレクトリ名
# 返値:なし
# 備考:(例1)CreateDir "c:\" "test_data"
################################################################################
function CreateDir($path, $dirName)
{
	$fullaPath = Join-Path $path $dirName
	
	if((Test-Path -Path $fullaPath) -eq $false){
		New-Item -Name $dirName -ItemType Directory -Path $path 
	}
}

################################################################################
# 機能:ファイルを削除します
# 引数:$filePath - ファイルパス
# 返値:なし
# 備考:(例1)DeleteFile "C:\test_data\test.txt"
################################################################################
function DeleteFile($filePath)
{
	if((Test-Path -Path $filePath) -eq $true){
		Remove-Item $filePath
	}
}

################################################################################
# 機能:ディレクトリを削除します
# 引数:$dirPath - ディレクトリパス
# 返値:なし
# 備考:(例1)DeleteDir "C:\test_data\"
################################################################################
function DeleteDir($dirPath)
{
	if((Test-Path -Path  $dirPath) -eq $true){
		Remove-Item $dirPath -Recurse
	}
}

################################################################################
# 機能:アイテムをコピーします
# 引数:$src - コピー元アイテム
#     :$dest - コピー先アイテム
# 返値:なし
# 備考:(例1)CopyItem "C:\test_data\test.txt" "C:\test_data2\test.txt" "force"
#     :(例2)CopyItem "C:\test_data\" "C:\test_data2\" 
################################################################################
function CopyItem($src, $dest, $force="")
{
	if($force -eq "force"){
		Copy-Item $src $dest -Recurse -Force
	}else{
		Copy-Item $src $dest -Recurse
	}
}

################################################################################
# 機能:アイテムを移動します
# 引数:$src - 移動元アイテム
#     :$dest - 移動先アイテム
# 返値:なし
# 備考:(例1)MoveItem "C:\test_data\test.txt" "C:\test_data2\test.txt" "force"
#     :(例2)MoveItem "C:\test_data\" "C:\test_data2\"
################################################################################
function MoveItem($src, $dest, $force="")
{
	if($force -eq "force"){
		Move-Item $src $dest -Force
	}else{
		Move-Item $src $dest
	}
}