-
Notifications
You must be signed in to change notification settings - Fork 5.5k
/
win_license.py
132 lines (91 loc) · 2.78 KB
/
win_license.py
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# -*- coding: utf-8 -*-
'''
This module allows you to manage windows licensing via slmgr.vbs
.. code-block:: bash
salt '*' license.install XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
'''
# Import Python Libs
from __future__ import absolute_import, unicode_literals, print_function
import re
import logging
# Import Salt Libs
import salt.utils.platform
log = logging.getLogger(__name__)
__virtualname__ = 'license'
def __virtual__():
'''
Only work on Windows
'''
if salt.utils.platform.is_windows():
return __virtualname__
return False
def installed(product_key):
'''
Check to see if the product key is already installed.
Note: This is not 100% accurate as we can only see the last
5 digits of the license.
CLI Example:
.. code-block:: bash
salt '*' license.installed XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
'''
cmd = r'cscript C:\Windows\System32\slmgr.vbs /dli'
out = __salt__['cmd.run'](cmd)
return product_key[-5:] in out
def install(product_key):
'''
Install the given product key
CLI Example:
.. code-block:: bash
salt '*' license.install XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
'''
cmd = r'cscript C:\Windows\System32\slmgr.vbs /ipk {0}'.format(product_key)
return __salt__['cmd.run'](cmd)
def uninstall():
'''
Uninstall the current product key
CLI Example:
.. code-block:: bash
salt '*' license.uninstall
'''
cmd = r'cscript C:\Windows\System32\slmgr.vbs /upk'
return __salt__['cmd.run'](cmd)
def activate():
'''
Attempt to activate the current machine via Windows Activation
CLI Example:
.. code-block:: bash
salt '*' license.activate
'''
cmd = r'cscript C:\Windows\System32\slmgr.vbs /ato'
return __salt__['cmd.run'](cmd)
def licensed():
'''
Return true if the current machine is licensed correctly
CLI Example:
.. code-block:: bash
salt '*' license.licensed
'''
cmd = r'cscript C:\Windows\System32\slmgr.vbs /dli'
out = __salt__['cmd.run'](cmd)
return 'License Status: Licensed' in out
def info():
'''
Return information about the license, if the license is not
correctly activated this will return None.
CLI Example:
.. code-block:: bash
salt '*' license.info
'''
cmd = r'cscript C:\Windows\System32\slmgr.vbs /dli'
out = __salt__['cmd.run'](cmd)
match = re.search(r'Name: (.*)\r\nDescription: (.*)\r\nPartial Product Key: (.*)\r\nLicense Status: (.*)', out,
re.MULTILINE)
if match is not None:
groups = match.groups()
return {
'name': groups[0],
'description': groups[1],
'partial_key': groups[2],
'licensed': 'Licensed' in groups[3]
}
return None