-
Notifications
You must be signed in to change notification settings - Fork 0
/
clean-start-tiles.psm1
106 lines (91 loc) · 1.89 KB
/
clean-start-tiles.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
#
# This sets the unpin command to search for.
#
$UNPIN_LABEL = "Unpin from Start"
#
# Gets all of the COM Application objects.
#
# Each of these will have a child with `verbs` to `pin/unpin` (i.e. Right-Click GUI actions).
#
function Get-ApplicationObjects ()
{
#Magic Number; Doesn't cover all live tiles. TODO: find ids for other tiles.
$COM_ID_Applications = '{4234d49b-0245-4df3-b780-3893943456e1}'
$obj = New-Object -Com Shell.Application
return $obj.NameSpace("shell:::$COM_ID_Applications")
}
#
# Gets the `Unpin...` Verb for an element of `Get-Application-Objects`
#
function Get-UnpinVerb ($item)
{
return $item.Verbs() | ?{$_.Name.replace('&','') -match "$UNPIN_LABEL"}
}
#
# Filter `Get-Application-Objects` for elements with a valid `Get-Verb-Unpin`.
#
function Get-UnpinnableApps()
{
$apps = Get-ApplicationObjects
return $apps.Items() | ?{Get-UnpinVerb($_)}
}
#
# Execute the unpin verb for an application node.
#
function Use-Unpin($item)
{
$verb = Get-UnpinVerb($item)
$verb.DoIt()
}
#
# Execute the unpin for all unpinnable apps
#
function Use-UnpinAll()
{
Get-UnpinnableApps | %{ Use-Unpin($_) }
}
#
# List Unpinnable apps to the console.
#
function Show-UnpinnableApps()
{
echo "
Applications With '$UNPIN_LABEL':
"
Get-UnpinnableApps | %{' ' + $_.Name}
}
#
# A simple CLI confirm/cancel loop.
#
function Use-Guard([string]$prompt)
{
$message =
"
${prompt}? [y/n]
"
do
{
$confirmation = Read-Host $message
if ($confirmation -eq 'n') {exit}
}
while($confirmation -ne "y");
}
#
# CLI command to remove all start tiles
#
# @option -y Confirm operation without user prompt.
#
function Remove-StartTiles
{
param(
[switch]$y = $false
)
Show-UnpinnableApps
if ( -not $y ) {Use-Guard("Clear All")}
echo '
Cleaning:
'
Use-UnpinAll
}
Export-ModuleMember -function Show-StartTiles
Export-ModuleMember -function Remove-StartTiles