forked from jdhitsolutions/PSScriptTools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
PSScriptTools.psm1
117 lines (105 loc) · 3.81 KB
/
PSScriptTools.psm1
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#enable verbose messaging in the psm1 file
if ($myinvocation.line -match "-verbose") {
$VerbosePreference = "continue"
}
Write-Verbose "Loading public functions"
Get-ChildItem -path $PSScriptRoot\functions\*.ps1 | ForEach-Object -process {
Write-Verbose $_.fullname
. $_.FullName
}
Write-Verbose "Define the global PSAnsiFileMap variable"
$json = "psansifilemap.json"
#test for user version
$userjson = Join-Path -path $HOME -ChildPath $json
$modjson = Join-Path -path $PSScriptRoot -ChildPath $json
if (Test-Path -path $userjson) {
$map = $userjson
}
else {
$map = $modjson
}
Set-Variable -Name PSAnsiFileMap -value (Get-Content -path $map | ConvertFrom-Json) -Scope Global
Write-Verbose "Define special character map"
$global:PSSpecialChar = @{
FullBlock = ([char]0x2588)
LightShade = ([char]0x2591)
MediumShade = ([char]0x2592)
DarkShade = ([char]0x2593)
BlackSquare = ([char]0x25A0)
WhiteSquare = ([char]0x25A1)
BlackSmallSquare = ([char]0x25AA)
WhiteSmallSquare = ([char]0x25AB)
UpTriangle = ([char]0x25B2)
DownTriangle = ([char]0x25BC)
Lozenge = ([char]0x25CA)
WhiteCircle = ([char]0x25CB)
BlackCircle = ([char]0x25CF)
WhiteFace = ([char]0x263A)
BlackFace = ([char]0x263B)
SixPointStar = ([char]0x2736)
Diamond = ([char]0x2666)
Club = ([char]0x2663)
Heart = ([char]0x2665)
Spade = ([char]0x2660)
Section = ([char]0x00A7)
RightPointer = ([char]0x25BA)
LeftPointer = ([char]0x25C4)
BlackRectangle = ([char]0x25AC)
}
Write-Verbose "Defining the variable `$PSSamplePath to the samples folder for this module"
$global:PSSamplePath = Join-Path -path $PSScriptroot -ChildPath Samples
Write-Verbose "Add ToDo options to the ISE or VS Code"
if ($psEditor) {
#This may not be working in newer versions of the PowerShell extension under PowerShell 7
Write-Verbose "Defining VSCode additions"
$sb = {
Param(
[Microsoft.PowerShell.EditorServices.Extensions.EditorContext]$context
)
$prompt = "What do you need to do?"
$title = "To Do"
$item = Invoke-InputBox -Title $title -Prompt $prompt
$todo = "# [$(Get-Date)] TODO: $item"
$context.CurrentFile.InsertText($todo)
}
$rParams = @{
Name = "Insert.ToDo"
DisplayName = "Insert ToDo"
ScriptBlock = $sb
SuppressOutput = $false
}
Register-EditorCommand @rParams
}
elseif ($psise) {
Write-Verbose "Defining ISE additions"
if ($psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.DisplayName -notcontains "ToDo") {
$action = {
$prompt = "What do you need to do?"
$title = "To Do"
$item = Invoke-InputBox -Title $title -Prompt $prompt
$todo = "# [$(Get-Date)] TODO: $item"
$psise.CurrentFile.Editor.InsertText($todo)
#jump cursor to the end
$psise.CurrentFile.editor.SetCaretPosition($psise.CurrentFile.Editor.CaretLine, $psise.CurrentFile.Editor.CaretColumn)
}
#add the action to the Add-Ons menu
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("ToDo", $Action, "Ctrl+Alt+2" ) | Out-Null
}
}
#define a function to open the PDF version of the README as a help file
Function Open-PSScriptToolsHelp {
[cmdletbinding()]
Param()
$pdf = Join-Path -path $PSScriptRoot -ChildPath PSScriptToolsManual.pdf
if (Test-Path -Path $pdf) {
Try {
Start-Process -FilePath $pdf -ErrorAction Stop
}
Catch {
Write-Warning "Failed to automatically open the PDF. You will need to manually open $pdf."
}
}
else {
Write-Warning "Can't find $pdf."
}
}