概要

FFFTPの接続設定をGUIで大量に作成するは面倒なので、FFFTPのiniファイルを直接編集するPowerShell関数を作成します。この関数は、指定したセクションとキーの値を取得および設定するために使用されます。

まず、プロジェクトフォルダの構成を示します。

プロジェクトフォルダの構成

📂FFFTPConfigEditor
┣ 📂Modules
┃ ┗ 📜FFFTPConfigHandler.psm1
┣ 📂Tests
┃ ┗ 📜FFFTPConfigTests.ps1
┣ 📜App.ps1
┗ 📜App-ショートカット

次に、各ファイルのアウトラインを示します。

App.ps1

# App.ps1
# アプリケーションのメインエントリポイント
Import-Module "$PSScriptRoot\\\\Modules\\\\FFFTPConfigHandler.psm1"

# テストスクリプトの実行
. "$PSScriptRoot\\\\Tests\\\\FFFTPConfigTests.ps1"

# メインスクリプトのロジックをここに記述

FFFTPConfigHandler.psm1

# FFFTPConfigHandler.psm1

# セクションとキーの値を取得する関数
function Get-INIValue {
    param (
        [string]$filePath,
        [string]$section,
        [string]$key
    )
    # ファイルが存在するか確認
    if (-Not (Test-Path $filePath)) {
        throw "ファイルが見つかりません: $filePath"
    }

    # iniファイルの内容を読み込む
    $content = Get-Content $filePath

    # セクションの開始位置を探す
    $sectionIndex = $content.IndexOf("[$section]")
    if ($sectionIndex -eq -1) {
        throw "セクションが見つかりません: $section"
    }

    # セクション内のキーの行を探す
    for ($i = $sectionIndex + 1; $i -lt $content.Length; $i++) {
        if ($content[$i] -match "^\\\\[$") {
            break
        }
        if ($content[$i] -match "^$key\\\\s*=") {
            return $content[$i].Split('=')[1].Trim()
        }
    }
    throw "キーが見つかりません: $key"
}

# セクションとキーの値を設定する関数
function Set-INIValue {
    param (
        [string]$filePath,
        [string]$section,
        [string]$key,
        [string]$value
    )
    # ファイルが存在するか確認
    if (-Not (Test-Path $filePath)) {
        throw "ファイルが見つかりません: $filePath"
    }

    # iniファイルの内容を読み込む
    $content = Get-Content $filePath
    $sectionIndex = $content.IndexOf("[$section]")
    if ($sectionIndex -eq -1) {
        # セクションが存在しない場合、新しく追加
        $content += "[$section]"
        $content += "$key=$value"
        Set-Content $filePath -Value $content
        return
    }

    # セクション内のキーの行を探して更新
    for ($i = $sectionIndex + 1; $i -lt $content.Length; $i++) {
        if ($content[$i] -match "^\\\\[$") {
            break
        }
        if ($content[$i] -match "^$key\\\\s*=") {
            $content[$i] = "$key=$value"
            Set-Content $filePath -Value $content
            return
        }
    }

    # キーが見つからなかった場合、新しく追加
    $content.Insert($sectionIndex + 1, "$key=$value")
    Set-Content $filePath -Value $content
}

FFFTPConfigTests.ps1

# FFFTPConfigTests.ps1

# テスト用のiniファイルパスを指定
$testIniFilePath = "$PSScriptRoot\\\\test_ffftp.ini"

# テスト: 値の取得
try {
    $value = Get-INIValue -filePath $testIniFilePath -section "Settings" -key "Port"
    Write-Output "Port: $value"
} catch {
    Write-Error $_
}

# テスト: 値の設定
try {
    Set-INIValue -filePath $testIniFilePath -section "Settings" -key "Port" -value "21"
    Write-Output "Port set to 21"
} catch {
    Write-Error $_
}

これで、FFFTPのiniファイルを直接編集する関数を作成しました。この構成を基にプロジェクトを進めてください。