Powershell GUI fronted (WPF) to run categorized console scripts

⌈⌋ ⎇ branch:  ClickyColoury


Check-in [168d091f87]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:New menu/plugin which adds dummy entries for unclassified scripts.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | trunk
Files: files | file ages | folders
SHA1: 168d091f87b9c53c547bdfe7523042d674fbdd0e
User & Date: mario 2018-05-19 22:49:43
Context
2018-05-19
22:49
New menu/plugin which adds dummy entries for unclassified scripts. Leaf check-in: 168d091f87 user: mario tags: trunk
22:47
Shorten starter.ps1 with `Is-PluginCompatible` function, scanning user plugins with standard scripts, and moving -Filter to separate script. check-in: 74c2c89475 user: mario tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Added contrib/AddPlainScriptDir.ps1.





































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# encoding: utf-8
# api: clicky
# type: init
# version: 0.2
# title: Add plain scripts
# description: Loads undocumented scripts from given directory into Clicky menu
# category: ui
# state: beta
# config:
#   { name: plain_scripts_dir, type: str, description: path to scan for undocumented PS scripts }
#   { name: plain_scripts_type, type: select, select: cli|window|inline, description: how to run non-PMD scripts }
# hidden: 1
# nomenu: 1
#
# Scans a given directory for plain powershell scripts. If no PMD is
# found embeds them into the menu with dummy values.
#
# This is used to craft a list of filename-only menu entries from
# undocumented tools.
#

# default config
@{
    plain_scripts_dir = "./powershell/scripts/*.ps1" # dirs to scan
    plain_scripts_type = "cli"            # could be inline
    plain_scripts_menu = "PlainScripts"   # menu name
}.GetEnumerator() | % {
    if (-not $cfg.containsKey($_.Key)) { $cfg[$_.Key] = $_.Value }
}


# menuitem moving (at this point the new menu was already added in 'Extras', so just move it to main menu bar)
if ($GUI -and $GUI.w) {
    if ($Menu_CAT = $GUI.w.findName("Menu_"+$cfg.plain_scripts_menu.toUpper()) ) {
        $Menu_MAIN = $GUI.w.findName("Menu_CMD").Parent
        $Menu_CAT.Parent.Items.Remove($Menu_CAT)
        $Menu_CAT.Header = $cfg.plain_scripts_menu
        $Menu_MAIN.Items.Insert(3, $Menu_CAT)
    }
    return
}
# reregister as init-gui (this plugin originally runs as `init`, but then should be invoked a second time in `init-gui` stage)
else {
    $_.type = "init-gui"   # simply adapt existing entry in $menu[]
}


# scan files, add to $menu list
$menu += @(Get-Item $cfg.plain_scripts_dir) | % {

    if (Is-PluginCompatible ($meta = Extract-PluginMeta $_)) {
        # pass
    }
    else {
        # stub fields
        $meta = @{
            fn = $_.FullName
            id = $_.BaseName
            api = "powershell" 
            type = ($cfg.plain_scripts_type)
            category= ($cfg.plain_scripts_menu.toLower())
            version = "0.0"
            title = $_.Name
            description = "plain powershell script"
            doc = "No documentation"
            author = "unknown"
            state = "unknown"
            menu = 1
            icon = "cmd"
            config = @()
            vars = @()
        }
        # try to gather something from DocBlock
        if ($help = Get-Help $_.FullName) {
            if ($help.NOTES) { $meta.doc = $help.NOTES }
            if ($help.DESCRIPTION) { $meta.description = $help.DESCRIPTION }
            if ($help.VERSION) { $meta.version = $help.VERSION }
        }
    }

    ($meta)
}

Changes to modules/starter.ps1.

1
2
3
4
5
6
7
8
9
10
11
12
13
# api: ps
# type: main
# title: ClickyColoury + TextyTypey - GUI+CLI tool frontend
# description: Convenience invocation of various Powershell and CMD scripts
# url: http://fossil.include-once.org/clickycoloury/
# version: 0.9.0
# depends: menu, wpf, clipboard
# category: misc
# config:
#   { name: cfg.gridview, type: select, value: Format-Table, select: Format-Table|Out-GridView, description: default table display mode }
#   { name: cfg.cli, type: bool, value: 0, description: Start console (CLI) version per default? }
#   { name: cfg.cached, type: bool, value: 0, description: Use CLIXML script cache on startup }
# author: mario





|







1
2
3
4
5
6
7
8
9
10
11
12
13
# api: ps
# type: main
# title: ClickyColoury + TextyTypey - GUI+CLI tool frontend
# description: Convenience invocation of various Powershell and CMD scripts
# url: http://fossil.include-once.org/clickycoloury/
# version: 0.9.2
# depends: menu, wpf, clipboard
# category: misc
# config:
#   { name: cfg.gridview, type: select, value: Format-Table, select: Format-Table|Out-GridView, description: default table display mode }
#   { name: cfg.cli, type: bool, value: 0, description: Start console (CLI) version per default? }
#   { name: cfg.cached, type: bool, value: 0, description: Use CLIXML script cache on startup }
# author: mario