DSCResources/cFirefoxBookmarks/cFirefoxBookmarks.schema.psm1

Configuration cFirefoxBookmarks
{
    # help about bookmarks
    # https://www.mozilla.jp/business/faq/tech/customize-defaults/#faq2
    param
    (

        [ValidateRange(1, 99)]
        [int] $Position = 1,

        [ValidateNotNullOrEmpty()]
        [string] $BookmarksLocation = 'BookmarksMenu',  # BookmarksMenu / BookmarksToolbar / BookmarksFolder-(FolderId)

        [ValidateNotNullOrEmpty()]
        [string] $Title,

        [ValidateSet('link', 'separator', 'folder')]
        [string] $Type = 'link',

        [ValidateNotNullOrEmpty()]
        [string] $Link,

        [string] $IconUrl,

        [string] $IconData,

        [int] $FolderId = 1,

        [ValidateNotNullOrEmpty()]
        [string] $FirefoxDirectory = "C:\Program Files\Mozilla Firefox"
    )

    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName DSCR_IniFile

    $MozIniPath = Join-Path $FirefoxDirectory "\distribution\distribution.ini"

    $Global = @{
        id      = 'DSC-Customized'
        version = '1.0'
        about   = 'DSC-Customized'
    }

    Script Check_FireFoxDirectory
    {
        GetScript = {
        }
        TestScript = {
            if(-not (Test-Path (Join-Path $using:FirefoxDirectory 'FireFox.exe') -PathType Leaf)){
                Write-Warning ('"FireFox.exe" does not exist in "{0}". Please confirm FireFoxDirectory' -f $using:FirefoxDirectory)
            }
            $true
        }
        SetScript = {
        }
    }

    cIniFile Global_Id
    {
        Ensure = 'Present'
        Path = $MozIniPath
        Key = 'id'
        Value = $Global.id
        Section = 'Global'
        Encoding = 'UTF8'
    }
    cIniFile Global_version
    {
        Ensure = 'Present'
        Path = $MozIniPath
        Key = 'version'
        Value = $Global.version
        Section = 'Global'
        Encoding = 'UTF8'
    }
    cIniFile Global_about
    {
        Ensure = 'Present'
        Path = $MozIniPath
        Key = 'about'
        Value = $Global.about
        Section = 'Global'
        Encoding = 'UTF8'
    }
    cIniFile Global_bookmarks
    {
        Ensure = 'Present'
        Path = $MozIniPath
        Key = 'bookmarks.initialized.pref'
        Value = 'distribution.ini.boomkarks.initialized'
        Section = 'Global'
        Encoding = 'UTF8'
    }

    if ($Type -eq 'link') {
        cIniFile Bookmarks_Title
        {
            Ensure = 'Present'
            Path = $MozIniPath
            Key = ("item.$Position.title")
            Value = $Title
            Section = $BookmarksLocation
            Encoding = 'UTF8'
        }
        cIniFile Bookmarks_Link
        {
            Ensure = 'Present'
            Path = $MozIniPath
            Key = ("item.$Position.link")
            Value = $Link
            Section = $BookmarksLocation
            Encoding = 'UTF8'
        }
        if ($IconUrl) {
            cIniFile Bookmarks_Icon
            {
                Ensure = 'Present'
                Path = $MozIniPath
                Key = ("item.$Position.icon")
                Value = $IconUrl
                Section = $BookmarksLocation
                Encoding = 'UTF8'
            }
        }
        if ($IconData) {
            cIniFile Bookmarks_IconData
            {
                Ensure = 'Present'
                Path = $MozIniPath
                Key = ("item.$Position.iconData")
                Value = $IconData
                Section = $BookmarksLocation
                Encoding = 'UTF8'
            }
        }
    }

    if ($Type -eq 'separator') {
        cIniFile Bookmarks_Separator
        {
            Ensure = 'Present'
            Path = $MozIniPath
            Key = ("item.$Position.type")
            Value = $Type
            Section = $BookmarksLocation
            Encoding = 'UTF8'
        }
    }

    if ($Type -eq 'folder') {
        cIniFile Bookmarks_Folder
        {
            Ensure = 'Present'
            Path = $MozIniPath
            Key = ("item.$Position.type")
            Value = $Type
            Section = $BookmarksLocation
            Encoding = 'UTF8'
        }
        cIniFile Bookmarks_Title
        {
            Ensure = 'Present'
            Path = $MozIniPath
            Key = ("item.$Position.title")
            Value = $Title
            Section = $BookmarksLocation
            Encoding = 'UTF8'
        }
        cIniFile Bookmarks_FolderId
        {
            Ensure = 'Present'
            Path = $MozIniPath
            Key = ("item.$Position.folderId")
            Value = $FolderId
            Section = $BookmarksLocation
            Encoding = 'UTF8'
        }
    }
}