PowerShellでテンプレートからファイルを新規作成するスクリプト

powershellコンピュータ
powershell
スクリプトモジュールのインストールのサンプルとしてファイルを新規作成するスクリプトを作りました。
PowerShellのモジュール(.psm1)をインストールするスクリプト2
実行中のスクリプトファイルの拡張子を判定することで.ps1と.psm1のハイブリッドスクリプトを作ることが出来ないかと思い試してみました。<#.SYNOPSIS拡張子を指定してファイルを新規作成.DESCRIPTIONファ...

指定拡張子の空のファイルを作るスクリプトでしたが、今回は拡張子ごとのテンプレートファイルからファイルを新規作成(テンプレートファイルのコピー)するようにしてみました。
ファイル名:New-File.ps1

<#
.SYNOPSIS
拡張子を指定してファイルを新規作成

.DESCRIPTION
ファイルを新規作成

.EXAMPLE
 New-File [-Extention][txt]

.PARAMETER Extension
 作成するファイルの拡張子(ドット(.)は含めない)

.LINK
#>

$ErrorActionPreference = "STOP"

function New-File
{
    param(
        [Parameter(ValueFromPipeline=$false,Mandatory=$false)]
        [string[]]
        $Extension = "txt",
        [switch]
        $Force
    )
    begin {}

    process {
        
        $path = (Join-Path (pwd).Path ("new." + $Extension))

        $tempPath = [Environment]::GetFolderPath("MyDocuments")+"\Templates"
        if (Test-Path $tempPath) {
            $files = ls -LiteralPath $tempPath -Filter ("*."+ $Extension)
            if ($files.Count -ne 0) {
                $files | select -First 1 | % {
                    if ($Force) {
                        cp -LiteralPath $_.FullName -Destination $path -Force
                    } else {
                        cp -LiteralPath $_.FullName -Destination $path
                    }
                    Get-ChildItem -LiteralPath $path
                    break
                }
            }
        }

        if ($Force) {
            New-Item -Path $path -Force
        } else {
            New-Item -Path $path
        }
    }
    end {}
}

if ([System.IO.Path]::GetExtension($PSCommandPath).ToLower() -eq ".ps1") {
    # モジュールのインストール(コピー)
    $moduleName = [System.IO.Path]::GetFileNameWithoutExtension($PSCommandPath)
    $ps1Path = Join-Path ([Environment]::GetFolderPath('MyDocument')) ("WindowsPowerShell\Modules\" + $moduleName)
    if (-not (Test-Path $ps1Path)) { mkdir $ps1Path | Out-Null }
    cp -LiteralPath $PSCommandPath -Destination (Join-Path $ps1Path ($moduleName+".psm1")) -Force
} else {
    # モジュールの公開
    Export-ModuleMember -Function New-File
}

Documentsフォルダ下にTemplatesというサブフォルダを作成しテンプレートファイルを保存してください。

コメント