Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
AD-Control-Golang
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陶腾飞
AD-Control-Golang
Commits
d6cacfef
Commit
d6cacfef
authored
Apr 04, 2022
by
陶腾飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2022-04-04
parent
b9e5176d
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
415 additions
and
381 deletions
+415
-381
.gitignore
+0
-2
README.MD
+1
-1
adct/adct.go
+1
-4
daemon/automatic.go
+49
-0
daemon/daemon.go
+27
-3
public/cmdb.go
+15
-44
public/cmdbjson.go
+2
-16
public/env.go
+23
-28
public/error.go
+1
-2
public/log.go
+4
-4
public/msg_deal.go
+11
-11
public/msg_init.go
+8
-9
public/send.go
+4
-3
public/user.go
+50
-37
public/win.go
+24
-174
public/wol.go
+1
-12
public/wxmsg.go
+5
-5
registry/registry.go
+114
-0
users/menu.go
+23
-23
users/users.go
+7
-3
users/walk.go
+45
-0
No files found.
.gitignore
View file @
d6cacfef
...
@@ -2,8 +2,6 @@ test/
...
@@ -2,8 +2,6 @@ test/
testwalk/
testwalk/
testmain/
testmain/
exe/
exe/
pkg/
catHardware/
.vscode/
.vscode/
*.bat
*.bat
*.ps1
*.ps1
...
...
README.MD
View file @
d6cacfef
...
@@ -43,7 +43,6 @@
...
@@ -43,7 +43,6 @@
> 3. 主机唤醒
> 3. 主机唤醒
> 4. 同步cmdb
> 4. 同步cmdb
> 5. 硬件信息收集
> 5. 硬件信息收集
> 6. 获取token
## 三、[cmdb](http://cmdb.zhiweidata.top/instances/types/28)
## 三、[cmdb](http://cmdb.zhiweidata.top/instances/types/28)
...
@@ -83,6 +82,7 @@
...
@@ -83,6 +82,7 @@
-
2022/03/29 v2.0.0 删除备份策略,同步域计算机信息到cmdb,添加账户、主机管理管理,唤醒策略更新,日志统一收集处理,运维平台添加管理员指令
-
2022/03/29 v2.0.0 删除备份策略,同步域计算机信息到cmdb,添加账户、主机管理管理,唤醒策略更新,日志统一收集处理,运维平台添加管理员指令
-
2022/03/30 v2.1.0 支持通过cmdb获取字段来唤醒主机,日志输出优化,支持通过运维平台打开远程终端
-
2022/03/30 v2.1.0 支持通过cmdb获取字段来唤醒主机,日志输出优化,支持通过运维平台打开远程终端
-
2022/03/31 v2.2.0 知微运维平台功能完善,修复cmdb的位置错误问题,修复用户会属于多个主要计算机的问题,修复内存条DDR4无法显示的问题,清除扫描硬盘出现U盘的情况
-
2022/03/31 v2.2.0 知微运维平台功能完善,修复cmdb的位置错误问题,修复用户会属于多个主要计算机的问题,修复内存条DDR4无法显示的问题,清除扫描硬盘出现U盘的情况
-
2022/04/04 v2.2.1 修复远程管理主机失败的问题,增加对操作系统的判断、为Cmdb Automatic Update Tool的自动更新工具(专用于非情报部门的主机的cmdb同步工具)做铺垫。
## 五、其他说明
## 五、其他说明
...
...
adct/adct.go
View file @
d6cacfef
...
@@ -2,6 +2,7 @@ package main
...
@@ -2,6 +2,7 @@ package main
import
(
import
(
pub
"AD-Control-Golang/public"
pub
"AD-Control-Golang/public"
"encoding/json"
"encoding/json"
"flag"
"flag"
"fmt"
"fmt"
...
@@ -24,7 +25,6 @@ func main() {
...
@@ -24,7 +25,6 @@ func main() {
var
wolHostText
=
flag
.
String
(
"wolhost"
,
""
,
"input hostname for waking pc"
)
var
wolHostText
=
flag
.
String
(
"wolhost"
,
""
,
"input hostname for waking pc"
)
var
wolAllText
=
flag
.
Bool
(
"wolall"
,
false
,
"wake all Domain Computer"
)
var
wolAllText
=
flag
.
Bool
(
"wolall"
,
false
,
"wake all Domain Computer"
)
var
hourText
=
flag
.
Bool
(
"hour"
,
false
,
"exec task at the time"
)
var
hourText
=
flag
.
Bool
(
"hour"
,
false
,
"exec task at the time"
)
var
cmdbtokenText
=
flag
.
Bool
(
"cmdbtoken"
,
false
,
""
)
var
loglevel
=
flag
.
String
(
"loglevel"
,
INFO
,
""
)
var
loglevel
=
flag
.
String
(
"loglevel"
,
INFO
,
""
)
var
force
=
flag
.
Bool
(
"force"
,
false
,
"force exec,ignore other"
)
var
force
=
flag
.
Bool
(
"force"
,
false
,
"force exec,ignore other"
)
var
quick
=
flag
.
Bool
(
"quick"
,
false
,
"quickly exec"
)
var
quick
=
flag
.
Bool
(
"quick"
,
false
,
"quickly exec"
)
...
@@ -57,9 +57,6 @@ func main() {
...
@@ -57,9 +57,6 @@ func main() {
pub
.
DomainCotroller
()
pub
.
DomainCotroller
()
wolALL
()
wolALL
()
}
else
if
*
cmdbtokenText
{
pub
.
DomainCotroller
()
pub
.
CmdbTokenUpdate
()
}
}
return
return
}
}
...
...
daemon/automatic.go
0 → 100644
View file @
d6cacfef
package
main
import
(
pub
"AD-Control-Golang/public"
reg
"AD-Control-Golang/registry"
"encoding/json"
"fmt"
"time"
)
const
reg_cmdb_token
=
"cmdb_token"
func
messionloop
()
{
ticker
:=
time
.
NewTicker
(
3600
*
time
.
Second
)
defer
ticker
.
Stop
()
// 若通道为空,则阻塞
// 若通道有数据,则读取
// 若通道关闭,则退出
for
range
ticker
.
C
{
setCMDBToken
()
}
}
func
setCMDBToken
()
bool
{
type
res
struct
{
Token
string
`json:"token"`
}
var
r
res
cmdbPath
:=
"api/login"
url
:=
fmt
.
Sprintf
(
"%s/%s"
,
reg
.
Query_DC
(
"cmdb_url"
),
cmdbPath
)
cmdbPass
:=
fmt
.
Sprintf
(
`{"password":"%s","username":"%s"}`
,
reg
.
Query_DC
(
"cmdb_tp"
),
reg
.
Query_DC
(
"cmdb_tu"
))
data
,
err
:=
pub
.
CmdbPOST
(
url
,
[]
byte
(
cmdbPass
))
msg_type
:=
"CMDB_TOKEN"
if
err
!=
nil
{
pub
.
LOG
(
ERROR
,
msg_type
,
err
)
return
false
}
if
err
:=
json
.
Unmarshal
(
data
,
&
r
);
err
!=
nil
{
pub
.
LOG
(
ERROR
,
msg_type
,
err
)
return
false
}
pub
.
LOG
(
INFO
,
msg_type
,
string
(
r
.
Token
))
reg
.
Write_DC
(
reg_cmdb_token
,
string
(
r
.
Token
))
pub
.
Reg_cmdb_token
=
string
(
r
.
Token
)
return
true
}
daemon/daemon.go
View file @
d6cacfef
...
@@ -2,6 +2,7 @@ package main
...
@@ -2,6 +2,7 @@ package main
import
(
import
(
pub
"AD-Control-Golang/public"
pub
"AD-Control-Golang/public"
reg
"AD-Control-Golang/registry"
"net"
"net"
"net/http"
"net/http"
"os"
"os"
...
@@ -9,9 +10,33 @@ import (
...
@@ -9,9 +10,33 @@ import (
var
l
*
os
.
File
var
l
*
os
.
File
const
INFO
=
pub
.
INFO
const
ERROR
=
pub
.
ERROR
const
NULL
=
pub
.
NULL
//pub.Loglevel = pub.DEBUG
func
mainInit
()
{
if
!
pub
.
DomainCotroller
()
&&
pub
.
Windows
()
&&
!
setCMDBToken
()
{
os
.
Exit
(
-
1
)
}
l
,
_
=
os
.
OpenFile
(
pub
.
User_userprofile
+
`\users.log`
,
os
.
O_RDWR
|
os
.
O_CREATE
|
os
.
O_APPEND
,
0766
)
pub
.
WxworkBotLink
=
reg
.
Query_DC
(
"WxworkBotLink"
)
pub
.
WxworkTokenMsgSend
=
reg
.
Query_DC
(
"WxworkTokenMsgSend"
)
pub
.
WxworkEncodingAseKey
=
reg
.
Query_DC
(
"WxworkEncodingAseKey"
)
pub
.
WxworkReceiverId
=
reg
.
Query_DC
(
"WxworkReceiverId"
)
pub
.
WxworkCorid
=
reg
.
Query_DC
(
"WxworkCorid"
)
pub
.
WxworkCorpSecret
=
reg
.
Query_DC
(
"WxworkCorpSecret"
)
pub
.
WxWorkAgentID
=
reg
.
Query_DC
(
"WxworkAgentID"
)
pub
.
AD_User_ADControl
=
reg
.
Query_DC
(
"ADControl"
)
pub
.
AD_User_ADControl_key
=
reg
.
Query_DC
(
"ADControl_key"
)
pub
.
CmdbUrl
=
reg
.
Query_DC
(
"cmdb_url"
)
pub
.
CmdbCITypeComputer
=
reg
.
Query_DC
(
"cmdb_CITypeComputer"
)
}
func
main
()
{
func
main
()
{
l
,
_
=
os
.
OpenFile
(
`H:\logs\users.log`
,
os
.
O_RDWR
|
os
.
O_CREATE
|
os
.
O_APPEND
,
0766
)
mainInit
(
)
//pub.Loglevel = pub.DEBUG
go
messionloop
()
go
listenLog
()
go
listenLog
()
listenMsg
()
listenMsg
()
...
@@ -19,7 +44,6 @@ func main() {
...
@@ -19,7 +44,6 @@ func main() {
func
listenMsg
()
{
func
listenMsg
()
{
pub
.
LOG
(
pub
.
INFO
,
pub
.
NULL
,
"start MSG daemon!"
)
pub
.
LOG
(
pub
.
INFO
,
pub
.
NULL
,
"start MSG daemon!"
)
http
.
HandleFunc
(
"/"
,
pub
.
DealMsgEnter
)
http
.
HandleFunc
(
"/"
,
pub
.
DealMsgEnter
)
http
.
ListenAndServe
(
pub
.
DaemonListen
,
nil
)
http
.
ListenAndServe
(
pub
.
DaemonListen
,
nil
)
}
}
...
...
public/cmdb.go
View file @
d6cacfef
...
@@ -8,10 +8,10 @@ import (
...
@@ -8,10 +8,10 @@ import (
"io/ioutil"
"io/ioutil"
"net/http"
"net/http"
"net/url"
"net/url"
"strings"
)
)
var
client
=
http
.
Client
{}
var
client
=
http
.
Client
{}
var
Reg_cmdb_token
string
func
getVFromK
(
cir
*
CIRecordResult
,
k
string
)
string
{
func
getVFromK
(
cir
*
CIRecordResult
,
k
string
)
string
{
var
r
string
var
r
string
...
@@ -66,7 +66,7 @@ func cmdbExistRecord(k, v string) (int, bool) {
...
@@ -66,7 +66,7 @@ func cmdbExistRecord(k, v string) (int, bool) {
var
cmdbPath
string
=
"api/v0.1/ci/s?q="
var
cmdbPath
string
=
"api/v0.1/ci/s?q="
v
=
cmdbChineseURL
(
k
,
v
)
v
=
cmdbChineseURL
(
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s&count=%s"
,
cmdbUrl
,
cmdbPath
,
c
mdbCITypeComputer
,
search
,
count
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s&count=%s"
,
CmdbUrl
,
cmdbPath
,
C
mdbCITypeComputer
,
search
,
count
)
LOG
(
DEBUG
,
CMDB
,
url
)
LOG
(
DEBUG
,
CMDB
,
url
)
var
cir
CIRecordReq
var
cir
CIRecordReq
data
,
err
:=
cmdbGET
(
url
)
data
,
err
:=
cmdbGET
(
url
)
...
@@ -89,7 +89,7 @@ func cmdbExistRecord(k, v string) (int, bool) {
...
@@ -89,7 +89,7 @@ func cmdbExistRecord(k, v string) (int, bool) {
}
}
cir
.
Uni_one
=
fmt
.
Sprintf
(
"%v"
,
NowTimestampNano
())
cir
.
Uni_one
=
fmt
.
Sprintf
(
"%v"
,
NowTimestampNano
())
cmdbPath
=
"api/v0.1/ci"
cmdbPath
=
"api/v0.1/ci"
url
=
fmt
.
Sprintf
(
"%s/%s"
,
c
mdbUrl
,
cmdbPath
)
url
=
fmt
.
Sprintf
(
"%s/%s"
,
C
mdbUrl
,
cmdbPath
)
jsondata
,
jsonerr
:=
cir
.
String
()
jsondata
,
jsonerr
:=
cir
.
String
()
LOG
(
DEBUG
,
"CMDB_NEW"
,
fmt
.
Sprintf
(
"路径:%s
\n
参数:%s"
,
url
,
string
(
jsondata
)))
LOG
(
DEBUG
,
"CMDB_NEW"
,
fmt
.
Sprintf
(
"路径:%s
\n
参数:%s"
,
url
,
string
(
jsondata
)))
...
@@ -98,7 +98,7 @@ func cmdbExistRecord(k, v string) (int, bool) {
...
@@ -98,7 +98,7 @@ func cmdbExistRecord(k, v string) (int, bool) {
return
0
,
false
return
0
,
false
}
}
if
_
,
err
:=
c
mdbPOST
(
url
,
jsondata
);
err
!=
nil
{
if
_
,
err
:=
C
mdbPOST
(
url
,
jsondata
);
err
!=
nil
{
LOG
(
ERROR
,
CMDB
,
err
)
LOG
(
ERROR
,
CMDB
,
err
)
return
0
,
false
return
0
,
false
}
else
{
}
else
{
...
@@ -120,7 +120,7 @@ func cmdbExistRecord(k, v string) (int, bool) {
...
@@ -120,7 +120,7 @@ func cmdbExistRecord(k, v string) (int, bool) {
func
cmdbUpdateRecordFromJSON
(
datastr
string
,
ci
int
)
error
{
func
cmdbUpdateRecordFromJSON
(
datastr
string
,
ci
int
)
error
{
var
cmdbPath
string
=
fmt
.
Sprintf
(
"api/v0.1/ci/%d"
,
ci
)
var
cmdbPath
string
=
fmt
.
Sprintf
(
"api/v0.1/ci/%d"
,
ci
)
url
:=
fmt
.
Sprintf
(
"%s/%s"
,
c
mdbUrl
,
cmdbPath
)
url
:=
fmt
.
Sprintf
(
"%s/%s"
,
C
mdbUrl
,
cmdbPath
)
LOG
(
DEBUG
,
CMDB
,
url
)
LOG
(
DEBUG
,
CMDB
,
url
)
data
,
err
:=
cmdbPUT
(
url
,
[]
byte
(
datastr
))
data
,
err
:=
cmdbPUT
(
url
,
[]
byte
(
datastr
))
...
@@ -139,34 +139,6 @@ func cmdbUpdateRecordFromJSON(datastr string, ci int) error {
...
@@ -139,34 +139,6 @@ func cmdbUpdateRecordFromJSON(datastr string, ci int) error {
return
nil
return
nil
}
}
// 获取token并保存于注册表
func
CmdbTokenUpdate
()
{
type
res
struct
{
Token
string
`json:"token"`
}
var
r
res
msg_type
:=
CMDB
+
"_TOKEN"
cmdbPath
:=
"api/login"
url
:=
fmt
.
Sprintf
(
"%s/%s"
,
cmdbUrl
,
cmdbPath
)
LOG
(
DEBUG
,
CMDB
,
url
)
data
,
err
:=
cmdbPOST
(
url
,
[]
byte
(
cmdbPass
))
if
err
!=
nil
{
LOG
(
ERROR
,
msg_type
,
err
)
return
}
if
err
:=
json
.
Unmarshal
(
data
,
&
r
);
err
!=
nil
{
LOG
(
ERROR
,
msg_type
,
err
)
return
}
if
len
(
r
.
Token
)
==
0
{
LOG
(
ERROR
,
msg_type
,
"token获取失败"
)
}
else
{
Reg_Write_DC
(
Reg_Key_cmdbtoken
,
string
(
r
.
Token
))
LOG
(
INFO
,
msg_type
,
"token更新完成"
)
}
}
// 根据键值获取CI
// 根据键值获取CI
func
cmdbGetCI
(
k
,
v
string
)
(
int
,
error
)
{
func
cmdbGetCI
(
k
,
v
string
)
(
int
,
error
)
{
...
@@ -174,7 +146,7 @@ func cmdbGetCI(k, v string) (int, error) {
...
@@ -174,7 +146,7 @@ func cmdbGetCI(k, v string) (int, error) {
var
cmdbPath
string
=
"api/v0.1/ci/s?q="
var
cmdbPath
string
=
"api/v0.1/ci/s?q="
v
=
cmdbChineseURL
(
k
,
v
)
v
=
cmdbChineseURL
(
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s&count=%s"
,
cmdbUrl
,
cmdbPath
,
c
mdbCITypeComputer
,
search
,
count
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s&count=%s"
,
CmdbUrl
,
cmdbPath
,
C
mdbCITypeComputer
,
search
,
count
)
LOG
(
DEBUG
,
CMDB
,
url
)
LOG
(
DEBUG
,
CMDB
,
url
)
var
cir
CIRecordReq
var
cir
CIRecordReq
data
,
err
:=
cmdbGET
(
url
)
data
,
err
:=
cmdbGET
(
url
)
...
@@ -204,7 +176,7 @@ func CmdbRecordValueClear(k, v string) error {
...
@@ -204,7 +176,7 @@ func CmdbRecordValueClear(k, v string) error {
var
cmdbPath
string
=
"api/v0.1/ci/s?q="
var
cmdbPath
string
=
"api/v0.1/ci/s?q="
v
=
cmdbChineseURL
(
k
,
v
)
v
=
cmdbChineseURL
(
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s"
,
cmdbUrl
,
cmdbPath
,
c
mdbCITypeComputer
,
search
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s"
,
CmdbUrl
,
cmdbPath
,
C
mdbCITypeComputer
,
search
)
LOG
(
DEBUG
,
CMDB
,
url
)
LOG
(
DEBUG
,
CMDB
,
url
)
var
cir
CIRecordReq
var
cir
CIRecordReq
...
@@ -241,7 +213,7 @@ func CmdbGetWordFromKV(k, v, w string) (string, error) {
...
@@ -241,7 +213,7 @@ func CmdbGetWordFromKV(k, v, w string) (string, error) {
var
cmdbPath
string
=
"api/v0.1/ci/s?q="
var
cmdbPath
string
=
"api/v0.1/ci/s?q="
v
=
cmdbChineseURL
(
k
,
v
)
v
=
cmdbChineseURL
(
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s&count=%s"
,
cmdbUrl
,
cmdbPath
,
c
mdbCITypeComputer
,
search
,
count
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s&count=%s"
,
CmdbUrl
,
cmdbPath
,
C
mdbCITypeComputer
,
search
,
count
)
LOG
(
DEBUG
,
CMDB
,
url
)
LOG
(
DEBUG
,
CMDB
,
url
)
var
cir
CIRecordReq
var
cir
CIRecordReq
data
,
err
:=
cmdbGET
(
url
)
data
,
err
:=
cmdbGET
(
url
)
...
@@ -274,7 +246,7 @@ func CmdbGetWordFromKV2(k, v, a, b string) (string, string, error) {
...
@@ -274,7 +246,7 @@ func CmdbGetWordFromKV2(k, v, a, b string) (string, string, error) {
v
=
cmdbChineseURL
(
k
,
v
)
v
=
cmdbChineseURL
(
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
search
:=
fmt
.
Sprintf
(
"%s:%s"
,
k
,
v
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s&count=%s"
,
cmdbUrl
,
cmdbPath
,
c
mdbCITypeComputer
,
search
,
count
)
url
:=
fmt
.
Sprintf
(
"%s/%s_type:%s,%s&count=%s"
,
CmdbUrl
,
cmdbPath
,
C
mdbCITypeComputer
,
search
,
count
)
LOG
(
DEBUG
,
CMDB
,
url
)
LOG
(
DEBUG
,
CMDB
,
url
)
var
cir
CIRecordReq
var
cir
CIRecordReq
data
,
err
:=
cmdbGET
(
url
)
data
,
err
:=
cmdbGET
(
url
)
...
@@ -299,7 +271,7 @@ func CmdbGetWordFromKV2(k, v, a, b string) (string, string, error) {
...
@@ -299,7 +271,7 @@ func CmdbGetWordFromKV2(k, v, a, b string) (string, string, error) {
}
}
}
}
func
c
mdbPOST
(
url
string
,
reqdata
[]
byte
)
([]
byte
,
error
)
{
func
C
mdbPOST
(
url
string
,
reqdata
[]
byte
)
([]
byte
,
error
)
{
buf
:=
bytes
.
NewBuffer
(
nil
)
buf
:=
bytes
.
NewBuffer
(
nil
)
buf
.
Write
(
reqdata
)
buf
.
Write
(
reqdata
)
h
,
err
:=
http
.
NewRequest
(
"POST"
,
url
,
buf
)
h
,
err
:=
http
.
NewRequest
(
"POST"
,
url
,
buf
)
...
@@ -310,9 +282,10 @@ func cmdbPOST(url string, reqdata []byte) ([]byte, error) {
...
@@ -310,9 +282,10 @@ func cmdbPOST(url string, reqdata []byte) ([]byte, error) {
// 如果需要token,则从注册表获取,token的获取是来自任务计划自动更新
// 如果需要token,则从注册表获取,token的获取是来自任务计划自动更新
// 如果,仅仅访问api/login,则不需要去获取token
// 如果,仅仅访问api/login,则不需要去获取token
if
strings
.
Index
(
url
,
"api/login"
)
==
-
1
{
// if strings.Index(url, "api/login") == -1 {
h
.
Header
.
Add
(
"Access-Token"
,
Reg_Query_DC
(
Reg_Key_cmdbtoken
))
// h.Header.Add("Access-Token", CmdbPass)
}
// }
h
.
Header
.
Add
(
"Access-Token"
,
Reg_cmdb_token
)
res
,
err
:=
(
&
client
)
.
Do
(
h
)
res
,
err
:=
(
&
client
)
.
Do
(
h
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -342,9 +315,7 @@ func cmdbPUT(url string, reqdata []byte) ([]byte, error) {
...
@@ -342,9 +315,7 @@ func cmdbPUT(url string, reqdata []byte) ([]byte, error) {
// 如果需要token,则从注册表获取,token的获取是来自任务计划自动更新
// 如果需要token,则从注册表获取,token的获取是来自任务计划自动更新
// 如果,仅仅访问api/login,则不需要去获取token
// 如果,仅仅访问api/login,则不需要去获取token
if
strings
.
Index
(
url
,
"api/login"
)
==
-
1
{
h
.
Header
.
Add
(
"Access-Token"
,
Reg_cmdb_token
)
h
.
Header
.
Add
(
"Access-Token"
,
Reg_Query_DC
(
Reg_Key_cmdbtoken
))
}
res
,
err
:=
(
&
client
)
.
Do
(
h
)
res
,
err
:=
(
&
client
)
.
Do
(
h
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
public/cmdbjson.go
View file @
d6cacfef
...
@@ -58,20 +58,6 @@ type CIRecordStartup struct {
...
@@ -58,20 +58,6 @@ type CIRecordStartup struct {
Disk
string
`json:"disk"`
// 硬盘
Disk
string
`json:"disk"`
// 硬盘
Memory
string
`json:"memory"`
// 内存
Memory
string
`json:"memory"`
// 内存
}
}
type
CIRecord
struct
{
Bumen
string
`json:"bumen"`
// 部门
Username
string
`json:"username"`
// 姓名
Position
string
`json:"position"`
// 具体位置
Seat
string
`json:"seat"`
// 主机座位坐标
Product_name
string
`json:"product_name"`
// 主机名
Ip
string
`json:"ip"`
// ip
Mac
string
`json:"mac"`
// mac地址
Start_time
string
`json:"start_time"`
// 启动时间
Shutdown_time
string
`json:"shutdown_time"`
// 关机时间
Cpu
string
`json:"cpu"`
// cpu
Disk
string
`json:"disk"`
// 硬盘
Memory
string
`json:"memory"`
// 内存
}
type
CIRecordUpdateReq
struct
{
type
CIRecordUpdateReq
struct
{
Ci_id
int
`json:"ci_id"`
Ci_id
int
`json:"ci_id"`
}
}
...
@@ -98,7 +84,7 @@ func (cir *CIRecordResult) BasicInfo(v string) error {
...
@@ -98,7 +84,7 @@ func (cir *CIRecordResult) BasicInfo(v string) error {
return
fmt
.
Errorf
(
"主机命令错误"
)
return
fmt
.
Errorf
(
"主机命令错误"
)
}
}
cir
.
Seat
=
hostnameSplit
[
2
]
cir
.
Seat
=
hostnameSplit
[
2
]
cir
.
Ci_type
=
c
mdbCITypeComputer
cir
.
Ci_type
=
C
mdbCITypeComputer
return
err
return
err
}
}
func
(
cir
*
CIRecordStartup
)
GetHardWare
()
{
func
(
cir
*
CIRecordStartup
)
GetHardWare
()
{
...
@@ -198,7 +184,7 @@ func (cir *CIRecordStartup) GetDept() (string, error) {
...
@@ -198,7 +184,7 @@ func (cir *CIRecordStartup) GetDept() (string, error) {
result
=
"金融组"
result
=
"金融组"
case
"TXHD"
:
case
"TXHD"
:
result
=
"腾讯互动组"
result
=
"腾讯互动组"
case
"TX
MT
"
:
case
"TX
WJ
"
:
result
=
"腾讯危机组"
result
=
"腾讯危机组"
case
"JS"
:
case
"JS"
:
result
=
"技术组"
result
=
"技术组"
...
...
public/env.go
View file @
d6cacfef
package
public
package
public
// os //
var
OS_Type
=
getOSType
()
// other //
// other //
var
Active
bool
=
true
var
Active
bool
=
true
...
@@ -8,28 +11,20 @@ const SymbolHostname = "-"
...
@@ -8,28 +11,20 @@ const SymbolHostname = "-"
// AD-Control //
// AD-Control //
const
Version
string
=
"2.2.
0
"
const
Version
string
=
"2.2.
1
"
const
Host_adserver
string
=
"ADSERVER"
const
Host_adserver
string
=
"ADSERVER"
const
Host_adserver_ip
string
=
"192.168.0.20"
const
Host_thserver
string
=
"THSERVER"
const
Host_thserver
string
=
"THSERVER"
const
Host_zzserver
string
=
"ZZSERVER"
const
Host_zzserver
string
=
"ZZSERVER"
const
DaemonListen
string
=
":16823"
const
DaemonListen
string
=
":16823"
const
DaemonLogListen
string
=
":16824"
const
DaemonLogListen
string
=
":16824"
const
ADServerDaemon
string
=
Host_adserver
+
DaemonListen
const
ADServerLogDaemon
string
=
Host_adserver
+
DaemonLogListen
const
THServerDaemon
string
=
Host_thserver
+
DaemonListen
//
//
// AD User env //
//
const
AD_User_main_admin
string
=
"zhiweiadserver"
var
ADServerDaemon
string
=
Host_adserver
+
DaemonListen
const
AD_User_tengfei
string
=
"tengfei"
var
ADServerLogDaemon
string
=
Host_adserver
+
DaemonLogListen
const
AD_User_taotengfei
string
=
"taotengfei"
var
THServerDaemon
string
=
Host_thserver
+
DaemonListen
const
AD_User_ADControl
string
=
"ad-control@zhiweireach.com"
const
AD_User_ADControl_key
string
=
"golang&*90-="
// users //
// users //
const
Users_Timeout
int
=
3
const
Users_Timeout
int
=
3
// user //
// user //
...
@@ -37,11 +32,11 @@ const Users_Timeout int = 3
...
@@ -37,11 +32,11 @@ const Users_Timeout int = 3
var
User_computername
string
=
GetEnv
(
"COMPUTERNAME"
)
var
User_computername
string
=
GetEnv
(
"COMPUTERNAME"
)
var
User_homeshare
string
=
GetEnv
(
"HOMESHARE"
)
var
User_homeshare
string
=
GetEnv
(
"HOMESHARE"
)
var
User_userdomain
string
=
GetEnv
(
"USERDOMAIN"
)
var
User_userdomain
string
=
GetEnv
(
"USERDOMAIN"
)
var
User_userprofile
string
=
GetEnv
(
"USERPROFILE"
)
var
User_name
string
=
GetEnv
(
"USERNAME"
)
var
User_name
string
=
GetEnv
(
"USERNAME"
)
var
User_tmp
string
=
GetEnv
(
"tmp"
)
var
User_tmp
string
=
GetEnv
(
"tmp"
)
var
User_sid
string
=
reg_query_key_one
(
HKCU
,
`Software\Microsoft\Windows\CurrentVersion\FileAssociations`
,
"UserSid"
)
var
User_sessionID
string
=
Reg_query_item_one
(
HKU
,
User_sid
+
`\Volatile Environment`
)
var
User_name_display
string
=
GetEnvFqdn
(
"CN"
)
var
User_name_display
string
=
GetEnvFqdn
(
"CN"
)
var
User_logonserver
string
=
GetEnv
(
"LOGONSERVER"
)
// SMB Folder//
// SMB Folder//
...
@@ -71,32 +66,31 @@ const (
...
@@ -71,32 +66,31 @@ const (
HKU
HKU
)
)
// reg value //
const
reg_LM_ADCONTROL
string
=
`software\AD-Control`
const
Reg_Key_cmdbtoken
string
=
"cmdb_token"
const
Reg_Key_cmdbtoken
string
=
"cmdb_token"
const
Reg_Value_ON
string
=
"ON"
const
Reg_Value_ON
string
=
"ON"
const
Reg_Value_OFF
string
=
"OFF"
const
Reg_Value_OFF
string
=
"OFF"
// other //
// other //
const
Link_WxworkBot
string
=
`https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=59107f72-5b72-4a20-a33c-fdb1cd46f2c6`
const
Cmd_c
string
=
"cmd /c "
const
Cmd_c
string
=
"cmd /c "
const
Cmd_k
string
=
"cmd /k "
const
Cmd_k
string
=
"cmd /k "
const
Cmd_K_Start
string
=
"cmd /k start "
const
Cmd_K_Start
string
=
"cmd /k start "
// wxwork key //
// wxwork key //
const
WxworkTokenMsgSend
string
=
"AvAQlFNxy1UQB3CjRml3GfKf7Y"
var
WxworkBotLink
string
const
WxworkEncodingAseKey
string
=
"AwLPVXc1MxPmqo7dzw8CYbbWku0nZlDwWDVCSknqEFy"
var
WxworkTokenMsgSend
string
const
WxworkReceiverId
string
=
"ww49cfd580625083c9"
var
WxworkEncodingAseKey
string
const
WxworkCorid
string
=
"ww49cfd580625083c9"
var
WxworkReceiverId
string
const
WxworkCorpSecret
string
=
"ckANI7SsRh0v_zu2uN7gitRHvTwqRAh8oG1a20xJo_I"
var
WxworkCorid
string
const
WxWorkAgentID
string
=
"1000014"
var
WxworkCorpSecret
string
var
WxWorkAgentID
string
// log level //
// log level //
var
Loglevel
string
=
INFO
var
Loglevel
string
=
INFO
const
INFO
string
=
"info"
const
INFO
string
=
"info"
const
WARN
string
=
"warn"
const
ERROR
string
=
"error"
const
ERROR
string
=
"error"
const
DEBUG
string
=
"debug"
const
DEBUG
string
=
"debug"
const
NULL
string
=
""
const
NULL
string
=
""
...
@@ -105,6 +99,7 @@ const NULL string = ""
...
@@ -105,6 +99,7 @@ const NULL string = ""
const
CMDB
string
=
"cmdb"
const
CMDB
string
=
"cmdb"
// cmdb //
// cmdb //
const
cmdbUrl
string
=
"http://192.168.0.21:5000"
var
CmdbUrl
string
const
cmdbCITypeComputer
string
=
"28"
var
CmdbCITypeComputer
string
const
cmdbPass
string
=
`{"password":"3f7eba3920866b2c2375ba61117c42bf","username":"tengfei"}`
var
AD_User_ADControl
string
var
AD_User_ADControl_key
string
public/error.go
View file @
d6cacfef
...
@@ -19,8 +19,7 @@ var Error_Fail_Token = errors.New("Get Token Fail")
...
@@ -19,8 +19,7 @@ var Error_Fail_Token = errors.New("Get Token Fail")
var
Error_Fail_File_Write
=
errors
.
New
(
"Fail File Write"
)
var
Error_Fail_File_Write
=
errors
.
New
(
"Fail File Write"
)
var
Error_Not_Msg
=
errors
.
New
(
"isn't defined msg"
)
var
Error_Not_Msg
=
errors
.
New
(
"isn't defined msg"
)
var
Error_WXWork_Down
=
errors
.
New
(
Error_WXWork_Down_STR
)
var
Error_WXWork_Down
=
errors
.
New
(
Error_WXWork_Fail_ReTry
)
var
Error_WXWork_Down_STR
=
"后台更新中..."
var
Error_WXWork_Fail_ReTry
=
"后台错误,稍后重试!"
var
Error_WXWork_Fail_ReTry
=
"后台错误,稍后重试!"
const
Error_CMDB_UPDATE_REQ
=
"更新失败"
const
Error_CMDB_UPDATE_REQ
=
"更新失败"
...
...
public/log.go
View file @
d6cacfef
...
@@ -41,11 +41,11 @@ func logDeal(level string, l *logs) {
...
@@ -41,11 +41,11 @@ func logDeal(level string, l *logs) {
if
err
!=
nil
{
if
err
!=
nil
{
SendWxworkTextToAdmins
(
err
.
Error
())
SendWxworkTextToAdmins
(
err
.
Error
())
}
}
if
DomainComputer
()
||
!
Zhiweireach
()
{
if
DomainComputer
()
{
SendLog
(
string
(
textbyte
))
SendLog
(
string
(
textbyte
))
return
return
}
}
if
DomainCotroller
()
{
if
DomainCotroller
()
{
switch
level
{
switch
level
{
// 绿色
// 绿色
...
@@ -64,7 +64,7 @@ func logDeal(level string, l *logs) {
...
@@ -64,7 +64,7 @@ func logDeal(level string, l *logs) {
return
return
}
}
}
}
func
LOG
(
level
string
,
msgtype
string
,
args
...
interface
{}
)
{
func
LOG
(
level
string
,
msgtype
string
,
args
...
any
)
{
if
(
Loglevel
!=
DEBUG
)
&&
(
level
==
DEBUG
)
{
if
(
Loglevel
!=
DEBUG
)
&&
(
level
==
DEBUG
)
{
return
return
}
}
...
@@ -72,6 +72,6 @@ func LOG(level string, msgtype string, args ...interface{}) {
...
@@ -72,6 +72,6 @@ func LOG(level string, msgtype string, args ...interface{}) {
l
.
Host
=
User_computername
l
.
Host
=
User_computername
l
.
Level
=
level
l
.
Level
=
level
l
.
MsgType
=
msgtype
l
.
MsgType
=
msgtype
l
.
Message
=
fmt
.
Sprint
(
fmt
.
Sprint
(
args
...
)
)
l
.
Message
=
fmt
.
Sprint
(
args
...
)
logDeal
(
level
,
&
l
)
logDeal
(
level
,
&
l
)
}
}
public/msg_deal.go
View file @
d6cacfef
...
@@ -81,7 +81,7 @@ func (rep *MJreport) MsgDeal() interface{} {
...
@@ -81,7 +81,7 @@ func (rep *MJreport) MsgDeal() interface{} {
LOG
(
INFO
,
rep
.
Instruction
,
rep
.
Computername
)
LOG
(
INFO
,
rep
.
Instruction
,
rep
.
Computername
)
}
}
}
}
// 客户端
处理
// 客户端
case
Msg_status_deal
:
case
Msg_status_deal
:
return
nil
return
nil
}
}
...
@@ -141,7 +141,7 @@ func (rep *MJreport) MsgDeal() interface{} {
...
@@ -141,7 +141,7 @@ func (rep *MJreport) MsgDeal() interface{} {
// 客户端
// 客户端
case
Msg_status_deal
:
case
Msg_status_deal
:
if
rep
.
DataStr
!=
""
{
if
rep
.
DataStr
!=
""
{
Msg
(
rep
.
DataStr
)
Msg
Box
(
rep
.
DataStr
)
}
}
}
}
default
:
default
:
...
@@ -172,7 +172,7 @@ func (exec *MJexec) MsgDeal() interface{} {
...
@@ -172,7 +172,7 @@ func (exec *MJexec) MsgDeal() interface{} {
exec
.
Status
=
Msg_Exec_State_Over
exec
.
Status
=
Msg_Exec_State_Over
case
Msg_Exec_State_Over
:
case
Msg_Exec_State_Over
:
if
exec
.
IfMsg
{
if
exec
.
IfMsg
{
Msg
(
exec
.
Explain
)
Msg
Box
(
exec
.
Explain
)
}
}
return
nil
return
nil
}
}
...
@@ -274,7 +274,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -274,7 +274,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
pc
,
mac
,
err
=
CmdbGetWordFromKV2
(
Cmdb_Username
,
wxwork
.
Name
,
Cmdb_Product_name
,
Cmdb_Mac
)
pc
,
mac
,
err
=
CmdbGetWordFromKV2
(
Cmdb_Username
,
wxwork
.
Name
,
Cmdb_Product_name
,
Cmdb_Mac
)
switch
err
{
switch
err
{
case
Error_CMDB_No_Record
:
case
Error_CMDB_No_Record
:
wxwork
.
SendText
(
`您还没有绑定个人主机,请使
个人账号登录系统后,打开小工具,点击"主机管理"-"绑定主机"
`
)
wxwork
.
SendText
(
`您还没有绑定个人主机,请使
用个人账号登录系统后,打开小工具,点击"主机管理"-"绑定主机"!
`
)
return
return
case
nil
:
case
nil
:
break
break
...
@@ -329,7 +329,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -329,7 +329,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
pc
,
err
=
CmdbGetWordFromKV
(
Cmdb_Username
,
wxwork
.
Name
,
Cmdb_Product_name
)
pc
,
err
=
CmdbGetWordFromKV
(
Cmdb_Username
,
wxwork
.
Name
,
Cmdb_Product_name
)
switch
err
{
switch
err
{
case
Error_CMDB_No_Record
:
case
Error_CMDB_No_Record
:
wxwork
.
SendText
(
`您还没有绑定个人主机,请使
个人账号登录系统后,打开小工具,点击"主机管理"-"绑定主机"
`
)
wxwork
.
SendText
(
`您还没有绑定个人主机,请使
用个人账号登录系统后,打开小工具,点击"主机管理"-"绑定主机"!
`
)
return
return
case
nil
:
case
nil
:
break
break
...
@@ -352,7 +352,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -352,7 +352,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
LOG
(
INFO
,
wxwork
.
Instruction
,
fmt
.
Sprintf
(
"host:%s,name:%s"
,
pc
,
wxwork
.
Name
))
LOG
(
INFO
,
wxwork
.
Instruction
,
fmt
.
Sprintf
(
"host:%s,name:%s"
,
pc
,
wxwork
.
Name
))
if
err
:=
PowerRestart
ForNow
(
pc
);
err
!=
nil
{
if
err
:=
RestartPC
ForNow
(
pc
);
err
!=
nil
{
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
wxwork
.
SendText
(
Error_WXWork_Fail_ReTry
)
wxwork
.
SendText
(
Error_WXWork_Fail_ReTry
)
return
return
...
@@ -390,7 +390,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -390,7 +390,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
pc
,
err
=
CmdbGetWordFromKV
(
Cmdb_Username
,
wxwork
.
Name
,
Cmdb_Product_name
)
pc
,
err
=
CmdbGetWordFromKV
(
Cmdb_Username
,
wxwork
.
Name
,
Cmdb_Product_name
)
switch
err
{
switch
err
{
case
Error_CMDB_No_Record
:
case
Error_CMDB_No_Record
:
wxwork
.
SendText
(
`您还没有绑定个人主机,请使
个人账号登录系统后,打开小工具,点击"主机管理"-"绑定主机"
`
)
wxwork
.
SendText
(
`您还没有绑定个人主机,请使
用个人账号登录系统后,打开小工具,点击"主机管理"-"绑定主机"!
`
)
return
return
case
nil
:
case
nil
:
break
break
...
@@ -413,7 +413,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -413,7 +413,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
LOG
(
INFO
,
wxwork
.
Instruction
,
fmt
.
Sprintf
(
"host:%s,name:%s"
,
pc
,
wxwork
.
Name
))
LOG
(
INFO
,
wxwork
.
Instruction
,
fmt
.
Sprintf
(
"host:%s,name:%s"
,
pc
,
wxwork
.
Name
))
if
err
:=
PowerShutdown
ForNow
(
pc
);
err
!=
nil
{
if
err
:=
ShutdownPC
ForNow
(
pc
);
err
!=
nil
{
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
LOG
(
ERROR
,
wxwork
.
Instruction
,
err
)
wxwork
.
SendText
(
Error_WXWork_Fail_ReTry
)
wxwork
.
SendText
(
Error_WXWork_Fail_ReTry
)
return
return
...
@@ -447,7 +447,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -447,7 +447,7 @@ func (wxwork *MJwxwork) MsgDealSend() {
pc
,
err
=
CmdbGetWordFromKV
(
Cmdb_Username
,
wxwork
.
Name
,
Cmdb_Product_name
)
pc
,
err
=
CmdbGetWordFromKV
(
Cmdb_Username
,
wxwork
.
Name
,
Cmdb_Product_name
)
switch
err
{
switch
err
{
case
Error_CMDB_No_Record
:
case
Error_CMDB_No_Record
:
wxwork
.
SendText
(
`您还没有绑定个人主机,请使
个人账号登录系统后,打开小工具,点击"主机管理"-"绑定主机"
`
)
wxwork
.
SendText
(
`您还没有绑定个人主机,请使
用个人账号登录系统后,打开小工具,点击"主机管理"-"绑定主机"!
`
)
return
return
case
nil
:
case
nil
:
break
break
...
@@ -459,11 +459,11 @@ func (wxwork *MJwxwork) MsgDealSend() {
...
@@ -459,11 +459,11 @@ func (wxwork *MJwxwork) MsgDealSend() {
// 检查 主机连接情况
// 检查 主机连接情况
status
,
err
:=
PSTest_Connection
(
pc
)
status
,
err
:=
PSTest_Connection
(
pc
)
if
err
!=
nil
{
if
err
!=
nil
{
wxwork
.
Result
=
Error_WXWork_
Down_STR
wxwork
.
Result
=
Error_WXWork_
Fail_ReTry
LOG
(
ERROR
,
NULL
,
err
)
LOG
(
ERROR
,
NULL
,
err
)
break
break
}
}
LOG
(
INFO
,
"Wxwork_Rec"
,
fmt
.
Sprintf
(
"host:%s,name:%s"
,
pc
,
wxwork
.
Name
))
LOG
(
INFO
,
WXEK_zwDevopsPowerStatus
,
fmt
.
Sprintf
(
"host:%s,name:%s"
,
pc
,
wxwork
.
Name
))
if
status
{
if
status
{
wxwork
.
Result
=
"主机已启动"
wxwork
.
Result
=
"主机已启动"
...
...
public/msg_init.go
View file @
d6cacfef
...
@@ -171,32 +171,31 @@ func (rep *MJreport) init(Report string) {
...
@@ -171,32 +171,31 @@ func (rep *MJreport) init(Report string) {
// Exec
// Exec
func
GJexec
(
s
string
)
MJexec
{
func
GJexec
(
s
,
id
string
)
MJexec
{
var
exec
MJexec
var
exec
MJexec
exec
.
Init
(
s
)
exec
.
Init
(
s
,
id
)
return
exec
return
exec
}
}
func
GJexecInstallSoftware
(
s
string
)
interface
{}
{
func
GJexecInstallSoftware
(
s
,
id
string
)
interface
{}
{
var
exec
MJexec
var
exec
MJexec
exec
.
Init
(
s
)
exec
.
Init
(
s
,
id
)
exec
.
Instruction
=
Msg_Exec_InstallSoftware
exec
.
Instruction
=
Msg_Exec_InstallSoftware
exec
.
Command
=
s
exec
.
Command
=
s
return
exec
return
exec
}
}
func
GJexecDIYFlag
(
flag
,
command
string
)
MJexec
{
func
GJexecDIYFlag
(
flag
,
command
,
id
string
)
MJexec
{
var
exec
MJexec
var
exec
MJexec
exec
.
Init
(
flag
)
exec
.
Init
(
flag
,
id
)
exec
.
Command
=
command
exec
.
Command
=
command
return
exec
return
exec
}
}
func
(
exec
*
MJexec
)
Init
(
s
string
,
id
string
)
{
func
(
exec
*
MJexec
)
Init
(
s
string
)
{
exec
.
Username
=
User_name
exec
.
Username
=
User_name
exec
.
Computername
=
User_computername
exec
.
Computername
=
User_computername
exec
.
MsgType
=
Msg_Exec
exec
.
MsgType
=
Msg_Exec
exec
.
Instruction
=
s
exec
.
Instruction
=
s
exec
.
SessionID
=
User_sessionID
exec
.
SessionID
=
id
exec
.
Status
=
Msg_Exec_State_Request
exec
.
Status
=
Msg_Exec_State_Request
exec
.
IfMsg
=
false
exec
.
IfMsg
=
false
}
}
...
...
public/send.go
View file @
d6cacfef
...
@@ -109,8 +109,9 @@ func SendPostRequestWithData(link *string, data interface{}) ([]byte, error) {
...
@@ -109,8 +109,9 @@ func SendPostRequestWithData(link *string, data interface{}) ([]byte, error) {
// 发送 到 微信机器人
// 发送 到 微信机器人
func
SendWX
(
Content
string
)
{
func
SendWX
(
Content
string
)
{
if
Adserver
()
{
if
DomainCotroller
()
{
if
GetEnv
(
"sendwx"
)
!=
"1"
{
if
GetEnv
(
"sendwx"
)
==
"0"
{
LOG
(
WARN
,
"ENV"
,
"系统变量检测到取消微信发送"
)
return
return
}
}
}
}
...
@@ -122,7 +123,7 @@ func SendWX(Content string) {
...
@@ -122,7 +123,7 @@ func SendWX(Content string) {
"content": "`
+
Content
+
`"
"content": "`
+
Content
+
`"
}
}
}`
)
}`
)
http
.
Post
(
Link_WxworkBot
,
"application/json; charset=utf-8"
,
bytes
.
NewBuffer
(
w
))
http
.
Post
(
WxworkBotLink
,
"application/json; charset=utf-8"
,
bytes
.
NewBuffer
(
w
))
}
}
func
SendWxworkTextToAUser
(
id
,
text
string
)
error
{
func
SendWxworkTextToAUser
(
id
,
text
string
)
error
{
...
...
public/user.go
View file @
d6cacfef
...
@@ -2,32 +2,35 @@ package public
...
@@ -2,32 +2,35 @@ package public
import
(
import
(
"fmt"
"fmt"
"os"
"runtime"
"strings"
"strings"
)
)
//
// os
//
// User
//
func
GetPrimaryUser
(
pc
string
)
string
{
const
(
// coding
OS_Type_Windows
=
iota
// LOG(INFO, "GetPrimaryUser", fmt.Sprintf("pc:%s,name:%s", pc, name))
OS_Type_MacOS
return
""
OS_Type_Linux
}
)
func
IsPrimaryUser
(
s
string
)
bool
{
if
strings
.
Index
(
s
,
"zhiwei"
)
==
-
1
{
func
getOSType
()
int
{
return
true
var
r
int
switch
runtime
.
GOOS
{
case
"darwin"
:
r
=
OS_Type_MacOS
case
"linux"
:
r
=
OS_Type_Linux
case
"windows"
:
r
=
OS_Type_Windows
default
:
os
.
Exit
(
-
1
)
}
}
return
false
return
r
}
}
func
AdminUser
(
user
*
string
)
bool
{
func
Windows
()
bool
{
switch
*
user
{
if
OS_Type
==
OS_Type_Windows
{
case
AD_User_taotengfei
:
return
true
case
AD_User_tengfei
:
return
true
case
AD_User_main_admin
:
return
true
return
true
}
}
return
false
return
false
...
@@ -40,20 +43,22 @@ func PublicUser() bool {
...
@@ -40,20 +43,22 @@ func PublicUser() bool {
return
false
return
false
}
}
//
// computer
//
// If computer
//
// 判断当前主机是否为域计算机
func
DomainComputer
()
bool
{
func
DomainComputer
()
bool
{
return
!
DomainCotroller
()
return
!
DomainCotroller
()
&&
Zhiweireach
()
}
}
// 判断当前主机是否为主控
func
Adserver
()
bool
{
func
Adserver
()
bool
{
if
Host_adserver
==
User_computername
{
if
Host_adserver
==
User_computername
{
return
true
return
true
}
}
return
false
return
false
}
}
// 判断当前主机是否为域控
func
DomainCotroller
()
bool
{
func
DomainCotroller
()
bool
{
var
r
bool
var
r
bool
switch
User_computername
{
switch
User_computername
{
...
@@ -66,19 +71,8 @@ func DomainCotroller() bool {
...
@@ -66,19 +71,8 @@ func DomainCotroller() bool {
}
}
return
r
return
r
}
}
func
BeSecNetwork
(
hostname
*
string
)
bool
{
//自动转大写
*
hostname
=
strings
.
ToUpper
(
*
hostname
)
//京东和HB组报告研究中心组,是第二个网络
// 仅仅用于域计算机的主机名判断
if
strings
.
HasPrefix
(
*
hostname
,
"HB"
)
||
strings
.
HasPrefix
(
*
hostname
,
"JD"
)
||
strings
.
HasPrefix
(
*
hostname
,
"BGYJZX"
)
{
return
true
}
return
false
}
func
GetHostnamePart
(
hostname
string
)
([]
string
,
error
)
{
func
GetHostnamePart
(
hostname
string
)
([]
string
,
error
)
{
n
:=
strings
.
Split
(
strings
.
ToUpper
(
hostname
),
SymbolHostname
)
n
:=
strings
.
Split
(
strings
.
ToUpper
(
hostname
),
SymbolHostname
)
if
len
(
n
)
!=
4
{
if
len
(
n
)
!=
4
{
...
@@ -86,3 +80,22 @@ func GetHostnamePart(hostname string) ([]string, error) {
...
@@ -86,3 +80,22 @@ func GetHostnamePart(hostname string) ([]string, error) {
}
}
return
n
,
nil
return
n
,
nil
}
}
// 判断计算机是否在zhiweireach中
func
Zhiweireach
()
bool
{
var
r
bool
switch
User_logonserver
{
case
`\\`
+
Host_adserver
:
r
=
true
case
`\\`
+
Host_thserver
:
r
=
true
case
`\\`
+
Host_zzserver
:
r
=
true
default
:
r
=
false
}
if
Windows
()
&&
r
{
return
true
}
return
false
}
public/win.go
View file @
d6cacfef
...
@@ -9,8 +9,6 @@ import (
...
@@ -9,8 +9,6 @@ import (
"strconv"
"strconv"
"strings"
"strings"
"github.com/lxn/walk"
"golang.org/x/sys/windows/registry"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/encoding/simplifiedchinese"
)
)
...
@@ -21,6 +19,9 @@ func GetEnv(e string) string {
...
@@ -21,6 +19,9 @@ func GetEnv(e string) string {
// 获取fqdn
// 获取fqdn
func
GetEnvFqdn
(
s
string
)
string
{
func
GetEnvFqdn
(
s
string
)
string
{
if
!
Windows
()
{
return
""
}
cmd
,
err
:=
exec
.
Command
(
"whoami"
,
"/fqdn"
)
.
Output
()
cmd
,
err
:=
exec
.
Command
(
"whoami"
,
"/fqdn"
)
.
Output
()
if
err
!=
nil
{
if
err
!=
nil
{
LOG
(
ERROR
,
NULL
,
err
)
LOG
(
ERROR
,
NULL
,
err
)
...
@@ -59,25 +60,17 @@ func execcmd_base(cmdargs string) (string, []string, error) {
...
@@ -59,25 +60,17 @@ func execcmd_base(cmdargs string) (string, []string, error) {
LOG
(
INFO
,
"CMD"
,
cmdargs
)
LOG
(
INFO
,
"CMD"
,
cmdargs
)
return
app
,
appargs
,
nil
return
app
,
appargs
,
nil
}
}
func
Execcmd_nowait
(
cmdargs
string
)
{
func
Execcmd_nowait
(
cmdargs
string
)
error
{
app
,
appargs
,
err
:=
execcmd_base
(
cmdargs
)
app
,
appargs
,
err
:=
execcmd_base
(
cmdargs
)
if
err
!=
nil
{
if
err
!=
nil
{
LOG
(
ERROR
,
NULL
,
err
)
LOG
(
ERROR
,
NULL
,
err
)
return
return
err
}
}
if
err
:=
exec
.
Command
(
app
,
appargs
...
)
.
Start
();
err
!=
nil
{
if
err
:=
exec
.
Command
(
app
,
appargs
...
)
.
Start
();
err
!=
nil
{
LOG
(
ERROR
,
NULL
,
err
)
LOG
(
ERROR
,
NULL
,
err
)
return
err
}
}
}
return
nil
func
Execcmd_copy
(
source
,
target
string
)
{
cmd
:=
exec
.
Command
(
"cmd"
,
"/k"
,
"copy"
,
"/y"
,
`"`
+
source
+
`"`
,
`"`
+
target
+
`"`
)
if
err
:=
cmd
.
Start
();
err
!=
nil
{
LOG
(
ERROR
,
"cmd_start"
,
err
)
}
if
err
:=
cmd
.
Wait
();
err
!=
nil
{
LOG
(
ERROR
,
"cmd_wait"
,
err
)
}
}
}
func
Execcmd_wait
(
cmdargs
string
)
{
func
Execcmd_wait
(
cmdargs
string
)
{
app
,
appargs
,
err
:=
execcmd_base
(
cmdargs
)
app
,
appargs
,
err
:=
execcmd_base
(
cmdargs
)
...
@@ -158,6 +151,9 @@ func PSCommandOutputNoSplit(cmd string) (string, error) {
...
@@ -158,6 +151,9 @@ func PSCommandOutputNoSplit(cmd string) (string, error) {
return
string
(
out
),
nil
return
string
(
out
),
nil
}
}
func
PSCommand
(
cmd
string
)
error
{
return
exec
.
Command
(
"powershell"
,
"-command"
,
cmd
)
.
Start
()
}
func
PSTest_Connection
(
host
string
)
(
bool
,
error
)
{
func
PSTest_Connection
(
host
string
)
(
bool
,
error
)
{
if
host
==
""
{
if
host
==
""
{
return
false
,
Error_Lost_Parameter
return
false
,
Error_Lost_Parameter
...
@@ -176,20 +172,6 @@ func PSTest_Connection(host string) (bool, error) {
...
@@ -176,20 +172,6 @@ func PSTest_Connection(host string) (bool, error) {
// local
// local
func
ChooseFile
(
explain
,
initDir
string
)
string
{
fg
:=
new
(
walk
.
FileDialog
)
fg
.
Title
=
explain
fg
.
InitialDirPath
=
initDir
fg
.
ShowOpen
(
*
new
(
walk
.
Form
))
return
fg
.
FilePath
}
func
ChooseFolder
(
explain
,
initDir
string
)
string
{
fg
:=
new
(
walk
.
FileDialog
)
fg
.
Title
=
explain
fg
.
InitialDirPath
=
initDir
fg
.
ShowBrowseFolder
(
*
new
(
walk
.
Form
))
return
fg
.
FilePath
}
func
OpenWindow
(
s
string
)
{
func
OpenWindow
(
s
string
)
{
Execcmd_nowait
(
"explorer "
+
s
)
Execcmd_nowait
(
"explorer "
+
s
)
}
}
...
@@ -231,146 +213,16 @@ func Pskill(pc, cmd string) {
...
@@ -231,146 +213,16 @@ func Pskill(pc, cmd string) {
// msg show
// msg show
// 显示带确定的消息框
func
Msg
(
message
string
)
{
walk
.
MsgBox
(
*
new
(
walk
.
Form
),
"提示"
,
message
,
walk
.
MsgBoxIconInformation
)
}
// UI:显示带确定和取消的消息框
// 点击确定按钮:返回1,
// 点击取消按钮:返回2
func
Msg_YesNo
(
message
string
)
int
{
return
walk
.
MsgBox
(
*
new
(
walk
.
Form
),
"提示"
,
message
,
walk
.
MsgBoxOKCancel
)
}
// 调用外部命令的MsgBox
// 调用外部命令的MsgBox
func
MsgBox
(
message
string
)
{
func
MsgBox
(
message
string
)
{
Execcmd_nowait
(
"msg * /TIME:60 "
+
message
)
Execcmd_nowait
(
"msg * /TIME:60 "
+
message
)
}
}
// 提示并关机
func
MsgShutdown
(
msg
string
)
{
go
Msg
(
msg
)
Execcmd_nowait
(
Msg_Exec_TurnOffPC_cmd
)
}
// 调用外部命令的指定计算机的消息的MsgBox
// 调用外部命令的指定计算机的消息的MsgBox
func
SysMsgBox
(
pc
,
message
string
)
{
func
SysMsgBox
(
pc
,
message
string
)
{
Execcmd_nowait
(
"msg * /SERVER:"
+
pc
+
" /TIME:60 "
+
message
)
Execcmd_nowait
(
"msg * /SERVER:"
+
pc
+
" /TIME:60 "
+
message
)
}
}
// 高级UI提示消息
func
MsgAdvUI
(
ni
*
walk
.
NotifyIcon
,
message
string
)
{
if
err
:=
ni
.
ShowCustom
(
"提示"
,
message
,
nil
);
err
!=
nil
{
LOG
(
ERROR
,
NULL
,
err
)
}
}
// regedit
func
reg_prase
(
root
*
int
)
registry
.
Key
{
switch
*
root
{
case
HKCU
:
return
registry
.
CURRENT_USER
case
HKU
:
return
registry
.
USERS
case
HKLM
:
return
registry
.
LOCAL_MACHINE
}
return
registry
.
LOCAL_MACHINE
}
func
Reg_Exist_item
(
root
int
,
path
string
)
{
//_,exist,err :=
registry
.
CreateKey
(
reg_prase
(
&
root
),
path
,
registry
.
ALL_ACCESS
)
}
func
Reg_IfExist_item
(
root
int
,
path
string
)
error
{
k
,
err
:=
registry
.
OpenKey
(
reg_prase
(
&
root
),
path
,
registry
.
READ
)
defer
k
.
Close
()
return
err
}
func
Reg_query_item_one
(
root
int
,
path
string
)
string
{
if
k
,
kerr
:=
registry
.
OpenKey
(
reg_prase
(
&
root
),
path
,
registry
.
READ
);
kerr
==
nil
{
defer
k
.
Close
()
if
sk
,
err
:=
k
.
ReadSubKeyNames
(
1
);
err
==
nil
{
return
sk
[
0
]
}
else
{
return
""
}
}
else
{
return
""
}
}
func
Reg_query_list
(
root
int
,
path
string
)
([]
string
,
error
)
{
if
k
,
kerr
:=
registry
.
OpenKey
(
reg_prase
(
&
root
),
path
,
registry
.
READ
);
kerr
==
nil
{
defer
k
.
Close
()
if
sk
,
err
:=
k
.
ReadSubKeyNames
(
0
);
err
==
nil
{
return
sk
,
nil
}
else
{
return
nil
,
Error_Null_Reg_Query
}
}
else
{
return
nil
,
Error_Null_Reg_Query
}
}
func
Reg_query_item
(
root
int
,
path
string
)
[]
string
{
if
k
,
kerr
:=
registry
.
OpenKey
(
reg_prase
(
&
root
),
path
,
registry
.
READ
);
kerr
==
nil
{
defer
k
.
Close
()
if
sk
,
err
:=
k
.
ReadSubKeyNames
(
0
);
err
==
nil
{
return
sk
}
else
{
return
nil
}
}
else
{
return
nil
}
}
func
reg_query_key_one
(
root
int
,
path
,
key
string
)
string
{
if
k
,
kerr
:=
registry
.
OpenKey
(
reg_prase
(
&
root
),
path
,
registry
.
READ
);
kerr
==
nil
{
defer
k
.
Close
()
if
sk
,
_
,
err
:=
k
.
GetStringValue
(
key
);
err
==
nil
{
return
sk
}
else
{
return
""
}
}
else
{
return
""
}
}
func
reg_Write_key_one
(
root
int
,
path
,
name
,
value
string
)
{
if
k
,
kerr
:=
registry
.
OpenKey
(
reg_prase
(
&
root
),
path
,
registry
.
WRITE
);
kerr
==
nil
{
defer
k
.
Close
()
k
.
SetStringValue
(
name
,
value
)
}
}
// reg func for domain computer
func
Reg_Write_DC
(
key
,
value
string
)
{
reg_Write_key_one
(
HKLM
,
reg_LM_ADCONTROL
,
key
,
value
)
}
func
Reg_Query_DC
(
key
string
)
string
{
return
reg_query_key_one
(
HKLM
,
reg_LM_ADCONTROL
,
key
)
}
// reg func for AD
func
Reg_Query_ADPC
(
pc
,
key
string
)
string
{
// coding
return
""
}
func
Reg_Write_ADDC
(
pc
,
key
,
value
string
)
{
// coding
}
func
Reg_Query_ADUsers
(
name
,
key
string
)
string
{
// coding
return
""
}
// File operate
// File operate
// 存在文件
// 存在文件
...
@@ -469,14 +321,6 @@ func GetNewFolder(rdir, extdir string) string {
...
@@ -469,14 +321,6 @@ func GetNewFolder(rdir, extdir string) string {
return
firstName
return
firstName
}
}
// application
func
Exit
()
{
os
.
Exit
(
1
)
}
func
ExitNormal
()
{
os
.
Exit
(
0
)
}
// 获取硬件信息
// 获取硬件信息
func
getHardwareCPUForPS
()
(
string
,
string
,
string
,
string
)
{
func
getHardwareCPUForPS
()
(
string
,
string
,
string
,
string
)
{
var
c
,
j
int
var
c
,
j
int
...
@@ -608,6 +452,10 @@ func getHardwareHardDiskForPS(mini bool) ([]string, []int64, []string, int) {
...
@@ -608,6 +452,10 @@ func getHardwareHardDiskForPS(mini bool) ([]string, []int64, []string, int) {
FriendlyName
[
j
]
=
m
FriendlyName
[
j
]
=
m
}
}
// 跳过虚拟硬盘
if
FriendlyName
[
j
]
==
"Msft Virtual Disk"
{
c
=
2
}
c
++
c
++
}
else
if
strings
.
Index
(
line
,
"Size"
)
!=
-
1
{
}
else
if
strings
.
Index
(
line
,
"Size"
)
!=
-
1
{
Size
:=
strings
.
TrimSpace
(
strings
.
Split
(
line
,
":"
)[
1
])
Size
:=
strings
.
TrimSpace
(
strings
.
Split
(
line
,
":"
)[
1
])
...
@@ -632,9 +480,13 @@ func getHardwareHardDiskForPS(mini bool) ([]string, []int64, []string, int) {
...
@@ -632,9 +480,13 @@ func getHardwareHardDiskForPS(mini bool) ([]string, []int64, []string, int) {
return
FriendlyName
,
Sizen
,
MediaType
,
j
-
1
return
FriendlyName
,
Sizen
,
MediaType
,
j
-
1
}
}
// 从
nslookup
中获取IP
// 从
Resolve-DnsName
中获取IP
func
GetIPFromNslookup
()
string
{
func
GetIPFromNslookup
()
string
{
cmd
:=
fmt
.
Sprintf
(
"(Resolve-DnsName $env:computername -server %s -Type A).IPAddress"
,
Host_adserver
)
// 根据登录的服务器作为DNS的解析变量
// 在域中,为主控
// 在工作组中,为本机
// 因此可以可以机器简单的方式获取到本机IP
cmd
:=
fmt
.
Sprintf
(
"(Resolve-DnsName $env:computername -server %s -Type A).IPAddress"
,
User_logonserver
)
result
,
_
:=
PSCommandOutputNoSplit
(
cmd
)
result
,
_
:=
PSCommandOutputNoSplit
(
cmd
)
return
strings
.
TrimSpace
(
result
)
return
strings
.
TrimSpace
(
result
)
}
}
...
@@ -645,12 +497,10 @@ func GetMacaddressFromIP(ip string) string {
...
@@ -645,12 +497,10 @@ func GetMacaddressFromIP(ip string) string {
}
}
// 电源管理
// 电源管理
func
PowerRestartForNow
(
pc
string
)
error
{
func
RestartPCForNow
(
pc
string
)
error
{
_
,
err
:=
PSCommandOutputNoSplit
(
fmt
.
Sprintf
(
"Invoke-Command -ComputerName %s -ScriptBlock{ Restart-Computer }"
,
pc
))
return
Execcmd_nowait
(
fmt
.
Sprintf
(
`shutdown -r -t 0 -m \\%s`
,
pc
))
return
err
}
}
func
PowerShutdownForNow
(
pc
string
)
error
{
func
ShutdownPCForNow
(
pc
string
)
error
{
_
,
err
:=
PSCommandOutputNoSplit
(
fmt
.
Sprintf
(
"Invoke-Command -ComputerName %s -ScriptBlock{ Stop-Computer }"
,
pc
))
return
Execcmd_nowait
(
fmt
.
Sprintf
(
`shutdown -s -t 0 -m \\%s`
,
pc
))
return
err
}
}
public/wol.go
View file @
d6cacfef
...
@@ -19,18 +19,7 @@ func Wol_enter(pc string, mac *string) {
...
@@ -19,18 +19,7 @@ func Wol_enter(pc string, mac *string) {
if
err
:=
wol
(
*
mac
);
err
!=
nil
{
if
err
:=
wol
(
*
mac
);
err
!=
nil
{
LOG
(
ERROR
,
NULL
,
err
)
LOG
(
ERROR
,
NULL
,
err
)
}
}
// 如果是704,且只有主控进行唤醒操作
// if BeSecNetwork(&pc) && Adserver(){
// SendTHMsg(Msg_Wake,GJwake(pc,*mac))
// // 否则本地直接唤醒(用于辅控在其他的网络唤醒)
// // 如果测试其他网络的滑行情况,需要注释else代码块
// }else {
// PntWol(pc,*mac)
// if err := wol(*mac); err != nil{
// LOG(ERROR,NULL,err)
// }
// }
}
}
func
wol
(
mac
string
)
error
{
func
wol
(
mac
string
)
error
{
...
...
public/wxmsg.go
View file @
d6cacfef
...
@@ -37,14 +37,14 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
...
@@ -37,14 +37,14 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
*
byteBody
)
*
byteBody
)
if
err
!=
nil
{
if
err
!=
nil
{
LOG
(
ERROR
,
NULL
,
"DecryptMsg fail"
,
cerr
)
LOG
(
ERROR
,
NULL
,
"DecryptMsg fail"
,
cerr
)
w
.
Result
=
Error_WXWork_
Down_STR
w
.
Result
=
Error_WXWork_
Fail_ReTry
return
w
return
w
}
}
// 解析具体消息
// 解析具体消息
if
nil
!=
xml
.
Unmarshal
(
msg
,
&
wxmsg
)
{
if
nil
!=
xml
.
Unmarshal
(
msg
,
&
wxmsg
)
{
LOG
(
ERROR
,
NULL
,
"Unmarshal fail"
)
LOG
(
ERROR
,
NULL
,
"Unmarshal fail"
)
w
.
Result
=
Error_WXWork_
Down_STR
w
.
Result
=
Error_WXWork_
Fail_ReTry
return
w
return
w
}
}
...
@@ -52,7 +52,7 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
...
@@ -52,7 +52,7 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
wtBricklayer
,
err
:=
GetWXWorkToken
()
wtBricklayer
,
err
:=
GetWXWorkToken
()
if
err
!=
nil
{
if
err
!=
nil
{
LOG
(
ERROR
,
NULL
,
err
)
LOG
(
ERROR
,
NULL
,
err
)
w
.
Result
=
Error_WXWork_
Down_STR
w
.
Result
=
Error_WXWork_
Fail_ReTry
return
w
return
w
}
}
...
@@ -60,7 +60,7 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
...
@@ -60,7 +60,7 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
name
,
err
:=
GetBricklayerName
(
wtBricklayer
,
wxmsg
.
FromUsername
)
name
,
err
:=
GetBricklayerName
(
wtBricklayer
,
wxmsg
.
FromUsername
)
if
err
!=
nil
{
if
err
!=
nil
{
LOG
(
ERROR
,
NULL
,
err
)
LOG
(
ERROR
,
NULL
,
err
)
w
.
Result
=
Error_WXWork_
Down_STR
w
.
Result
=
Error_WXWork_
Fail_ReTry
return
w
return
w
}
}
...
@@ -99,7 +99,7 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
...
@@ -99,7 +99,7 @@ func ParseWX(d string, byteBody *[]byte) MJwxwork {
// if nil != cryptErr {
// if nil != cryptErr {
// LOG(ERROR,NULL,"DecryptMsg fail", cryptErr)
// LOG(ERROR,NULL,"DecryptMsg fail", cryptErr)
// return Error_WXWork_
Down_STR
// return Error_WXWork_
Fail_ReTry
// }
// }
// return string(cryptMsg)
// return string(cryptMsg)
...
...
registry/registry.go
0 → 100644
View file @
d6cacfef
package
registry
import
(
"errors"
"golang.org/x/sys/windows/registry"
)
// reg info //
const
(
HKCU
=
iota
HKLM
HKU
)
var
Error_Null_Reg_Query
=
errors
.
New
(
"Not Found Reg Query Result"
)
const
reg_LM_ADCONTROL
string
=
`software\AD-Control`
// reg func for domain computer
func
Write_DC
(
key
,
value
string
)
{
Write_key_one
(
HKLM
,
reg_LM_ADCONTROL
,
key
,
value
)
}
func
Query_DC
(
key
string
)
string
{
return
Query_key_one
(
HKLM
,
reg_LM_ADCONTROL
,
key
)
}
// reg func for AD
func
Query_ADPC
(
pc
,
key
string
)
string
{
// coding
return
""
}
func
Write_ADDC
(
pc
,
key
,
value
string
)
{
// coding
}
func
Exist_item
(
root
int
,
path
string
)
{
registry
.
CreateKey
(
prase
(
&
root
),
path
,
registry
.
ALL_ACCESS
)
}
func
IfExist_item
(
root
int
,
path
string
)
error
{
k
,
err
:=
registry
.
OpenKey
(
prase
(
&
root
),
path
,
registry
.
READ
)
defer
k
.
Close
()
return
err
}
func
Query_item_one
(
root
int
,
path
string
)
string
{
if
k
,
kerr
:=
registry
.
OpenKey
(
prase
(
&
root
),
path
,
registry
.
READ
);
kerr
==
nil
{
defer
k
.
Close
()
if
sk
,
err
:=
k
.
ReadSubKeyNames
(
1
);
err
==
nil
{
return
sk
[
0
]
}
else
{
return
""
}
}
else
{
return
""
}
}
func
Query_list
(
root
int
,
path
string
)
([]
string
,
error
)
{
if
k
,
kerr
:=
registry
.
OpenKey
(
prase
(
&
root
),
path
,
registry
.
READ
);
kerr
==
nil
{
defer
k
.
Close
()
if
sk
,
err
:=
k
.
ReadSubKeyNames
(
0
);
err
==
nil
{
return
sk
,
nil
}
else
{
return
nil
,
Error_Null_Reg_Query
}
}
else
{
return
nil
,
Error_Null_Reg_Query
}
}
func
Query_item
(
root
int
,
path
string
)
[]
string
{
if
k
,
kerr
:=
registry
.
OpenKey
(
prase
(
&
root
),
path
,
registry
.
READ
);
kerr
==
nil
{
defer
k
.
Close
()
if
sk
,
err
:=
k
.
ReadSubKeyNames
(
0
);
err
==
nil
{
return
sk
}
else
{
return
nil
}
}
else
{
return
nil
}
}
func
Query_key_one
(
root
int
,
path
,
key
string
)
string
{
if
k
,
kerr
:=
registry
.
OpenKey
(
prase
(
&
root
),
path
,
registry
.
READ
);
kerr
==
nil
{
defer
k
.
Close
()
if
sk
,
_
,
err
:=
k
.
GetStringValue
(
key
);
err
==
nil
{
return
sk
}
else
{
return
""
}
}
else
{
return
""
}
}
func
Write_key_one
(
root
int
,
path
,
name
,
value
string
)
{
if
k
,
kerr
:=
registry
.
OpenKey
(
prase
(
&
root
),
path
,
registry
.
WRITE
);
kerr
==
nil
{
defer
k
.
Close
()
k
.
SetStringValue
(
name
,
value
)
}
}
func
prase
(
root
*
int
)
registry
.
Key
{
switch
*
root
{
case
HKCU
:
return
registry
.
CURRENT_USER
case
HKU
:
return
registry
.
USERS
case
HKLM
:
return
registry
.
LOCAL_MACHINE
}
return
registry
.
LOCAL_MACHINE
}
users/menu.go
View file @
d6cacfef
...
@@ -72,7 +72,7 @@ func menuInitPower(ni *walk.NotifyIcon) {
...
@@ -72,7 +72,7 @@ func menuInitPower(ni *walk.NotifyIcon) {
// 电源管理 保持开机
// 电源管理 保持开机
func
pKeepRunning
()
{
func
pKeepRunning
()
{
pub
.
Active
=
false
pub
.
Active
=
false
pub
.
Msg
(
"将保持开机,至次日9点恢复"
)
Msg
(
"将保持开机,至次日9点恢复"
)
pub
.
LOG
(
INFO
,
"USERS_POWER"
,
"执行 电源管理-保持开机"
)
pub
.
LOG
(
INFO
,
"USERS_POWER"
,
"执行 电源管理-保持开机"
)
}
}
...
@@ -124,10 +124,10 @@ func menuInitAccountManager(ni *walk.NotifyIcon) {
...
@@ -124,10 +124,10 @@ func menuInitAccountManager(ni *walk.NotifyIcon) {
// 账号管理 申请个人账号
// 账号管理 申请个人账号
func
tAccountManagerSignUP
()
{
func
tAccountManagerSignUP
()
{
if
!
pub
.
PublicUser
()
{
if
!
pub
.
PublicUser
()
{
pub
.
Msg
(
"您已经正在使用个人账号!"
)
Msg
(
"您已经正在使用个人账号!"
)
return
return
}
}
pub
.
Msg
(
"功能开发中"
)
Msg
(
"功能开发中"
)
}
}
...
@@ -181,18 +181,18 @@ func menuInitHostManager(ni *walk.NotifyIcon) {
...
@@ -181,18 +181,18 @@ func menuInitHostManager(ni *walk.NotifyIcon) {
// 主机管理 绑定主机
// 主机管理 绑定主机
func
tHostManagerBind
()
{
func
tHostManagerBind
()
{
if
r
:=
pub
.
Msg_YesNo
(
`执行本操作后,通过企业微信的"知微运维平台"的电源管理的主机将是本机。`
);
r
==
1
{
if
r
:=
Msg_YesNo
(
`执行本操作后,通过企业微信的"知微运维平台"的电源管理的主机将是本机。`
);
r
==
1
{
pub
.
SendADMsg
(
pub
.
Msg_Report
,
pub
.
GJreportString
(
pub
.
Msg_Report_UpdatePrimaryHost
,
pub
.
User_name_display
))
pub
.
SendADMsg
(
pub
.
Msg_Report
,
pub
.
GJreportString
(
pub
.
Msg_Report_UpdatePrimaryHost
,
pub
.
User_name_display
))
}
}
}
}
func
tHostManagerTerminal
()
{
func
tHostManagerTerminal
()
{
if
pub
.
IfBeforeMin
(
timeout
,
pub
.
Users_Timeout
)
{
if
pub
.
IfBeforeMin
(
timeout
,
pub
.
Users_Timeout
)
{
pub
.
Msg
(
`暂时无法使用!`
)
Msg
(
`暂时无法使用!`
)
return
return
}
}
if
r
:=
pub
.
Msg_YesNo
(
`非管理人员,请勿使用!`
);
r
==
1
{
if
r
:=
Msg_YesNo
(
`非管理人员,请勿使用!`
);
r
==
1
{
timeout
=
time
.
Now
()
timeout
=
time
.
Now
()
pub
.
SendServerExec
(
pub
.
GJexec
(
pub
.
Msg_Exec_OpenRemoteTerminal
))
pub
.
SendServerExec
(
pub
.
GJexec
(
pub
.
Msg_Exec_OpenRemoteTerminal
,
User_sessionID
))
}
}
}
}
...
@@ -266,7 +266,7 @@ func tMultiSplit() {
...
@@ -266,7 +266,7 @@ func tMultiSplit() {
// 其他工具 优雅批量打开网页
// 其他工具 优雅批量打开网页
func
tBatchOpenWeb
()
{
func
tBatchOpenWeb
()
{
go
pub
.
Msg
(
"务必在新浏览器窗口中进行批量打开,且在浏览器中设置允许弹窗。"
)
go
Msg
(
"务必在新浏览器窗口中进行批量打开,且在浏览器中设置允许弹窗。"
)
chrome
:=
`C:\Progra~2\Google\Chrome\Application\chrome.exe http://mp.zhiweireach.com`
chrome
:=
`C:\Progra~2\Google\Chrome\Application\chrome.exe http://mp.zhiweireach.com`
pub
.
Execcmd_nowait
(
chrome
)
pub
.
Execcmd_nowait
(
chrome
)
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-优雅批量打开网页"
)
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-优雅批量打开网页"
)
...
@@ -276,11 +276,11 @@ func tBatchOpenWeb() {
...
@@ -276,11 +276,11 @@ func tBatchOpenWeb() {
func
tPdfTrans
()
{
func
tPdfTrans
()
{
AcrobatDC
:=
`C:\Application\AcrobatDC\AcrobatDCPortable.exe`
AcrobatDC
:=
`C:\Application\AcrobatDC\AcrobatDCPortable.exe`
if
pub
.
NotExist
(
AcrobatDC
)
{
if
pub
.
NotExist
(
AcrobatDC
)
{
go
pub
.
Msg
(
`Acrobat DC不存在!请先从"软件安装"中 安装或修复`
)
go
Msg
(
`Acrobat DC不存在!请先从"软件安装"中 安装或修复`
)
return
return
}
}
go
pub
.
Msg
(
`Acrobat DC正在打开`
)
go
Msg
(
`Acrobat DC正在打开`
)
pub
.
SendServerExec
(
pub
.
GJexecDIYFlag
(
pub
.
Msg_Exec_OpenAdminEXE
,
AcrobatDC
))
pub
.
SendServerExec
(
pub
.
GJexecDIYFlag
(
pub
.
Msg_Exec_OpenAdminEXE
,
AcrobatDC
,
User_sessionID
))
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-PDF转换"
)
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-PDF转换"
)
return
return
...
@@ -289,13 +289,13 @@ func tPdfTrans() {
...
@@ -289,13 +289,13 @@ func tPdfTrans() {
// 其他工具 更新手机代理程序
// 其他工具 更新手机代理程序
func
tUpdateATool
()
{
func
tUpdateATool
()
{
pub
.
Execcmd_wait
(
`xcopy \\adserver\software\phoneproxy\ATools\win-unpacked C:\Application\win-unpacked /D /S /E /C /y`
)
pub
.
Execcmd_wait
(
`xcopy \\adserver\software\phoneproxy\ATools\win-unpacked C:\Application\win-unpacked /D /S /E /C /y`
)
pub
.
Msg
(
"更新完成"
)
Msg
(
"更新完成"
)
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-更新手机代理程序"
)
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-更新手机代理程序"
)
}
}
// 其他工具 隐藏/显示桌面图标
// 其他工具 隐藏/显示桌面图标
func
tHideShowIcon
()
{
func
tHideShowIcon
()
{
pub
.
Msg
(
"注:并非所有图标都会列出,没有列出的图标请手动隐藏(右键文件,打开属性,勾选隐藏,点击确定)"
)
Msg
(
"注:并非所有图标都会列出,没有列出的图标请手动隐藏(右键文件,打开属性,勾选隐藏,点击确定)"
)
mw
:=
&
MyMainWindow
{
model
:
HideShowIconModel
()}
mw
:=
&
MyMainWindow
{
model
:
HideShowIconModel
()}
if
_
,
err
:=
(
MainWindow
{
if
_
,
err
:=
(
MainWindow
{
...
@@ -316,7 +316,7 @@ func tHideShowIcon() {
...
@@ -316,7 +316,7 @@ func tHideShowIcon() {
},
},
},
},
}
.
Run
());
err
!=
nil
{
}
.
Run
());
err
!=
nil
{
pub
.
Msg
(
"执行错误"
)
Msg
(
"执行错误"
)
pub
.
LOG
(
pub
.
ERROR
,
NULL
,
err
)
pub
.
LOG
(
pub
.
ERROR
,
NULL
,
err
)
}
}
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-隐藏/显示桌面图标"
)
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-隐藏/显示桌面图标"
)
...
@@ -326,7 +326,7 @@ func HideShowIconModel() *EnvModel {
...
@@ -326,7 +326,7 @@ func HideShowIconModel() *EnvModel {
r
,
err
:=
pub
.
PSCommandOutput
(
`Get-ChildItem -Force -Filter *.lnk C:\Users\Public\Desktop -Name`
)
r
,
err
:=
pub
.
PSCommandOutput
(
`Get-ChildItem -Force -Filter *.lnk C:\Users\Public\Desktop -Name`
)
if
err
!=
nil
{
if
err
!=
nil
{
pub
.
Msg
(
"执行失败"
)
Msg
(
"执行失败"
)
return
nil
return
nil
}
}
list
:=
strings
.
Split
(
r
,
"
\n
"
)
list
:=
strings
.
Split
(
r
,
"
\n
"
)
...
@@ -343,12 +343,12 @@ func (mw *MyMainWindow) tHideShowIconDeal() {
...
@@ -343,12 +343,12 @@ func (mw *MyMainWindow) tHideShowIconDeal() {
app
:=
(
&
mw
.
model
.
items
[
mw
.
lb
.
CurrentIndex
()])
.
name
app
:=
(
&
mw
.
model
.
items
[
mw
.
lb
.
CurrentIndex
()])
.
name
fullAppDir
:=
`C:\Users\public\desktop\`
+
app
+
`.lnk`
fullAppDir
:=
`C:\Users\public\desktop\`
+
app
+
`.lnk`
var
exec
pub
.
MJexec
var
exec
pub
.
MJexec
exec
.
Init
(
pub
.
Msg_Exec_HideShowIcon
)
exec
.
Init
(
pub
.
Msg_Exec_HideShowIcon
,
User_sessionID
)
exec
.
DataStr
=
fullAppDir
exec
.
DataStr
=
fullAppDir
r
,
err
:=
pub
.
PSCommandOutputNoSplit
(
fmt
.
Sprintf
(
`(Get-Item "%s" -Force ).Attributes`
,
fullAppDir
))
r
,
err
:=
pub
.
PSCommandOutputNoSplit
(
fmt
.
Sprintf
(
`(Get-Item "%s" -Force ).Attributes`
,
fullAppDir
))
if
err
!=
nil
{
if
err
!=
nil
{
pub
.
Msg
(
"执行失败"
)
Msg
(
"执行失败"
)
return
return
}
}
if
strings
.
Index
(
r
,
"Hidden"
)
==
-
1
{
if
strings
.
Index
(
r
,
"Hidden"
)
==
-
1
{
...
@@ -366,10 +366,10 @@ func (mw *MyMainWindow) tHideShowIconDeal() {
...
@@ -366,10 +366,10 @@ func (mw *MyMainWindow) tHideShowIconDeal() {
func
tWindowsBlock
()
{
func
tWindowsBlock
()
{
PopBlock
:=
`C:\Progra~2\zhiwei\huorong_windows_block\PopBlock.exe`
PopBlock
:=
`C:\Progra~2\zhiwei\huorong_windows_block\PopBlock.exe`
if
pub
.
NotExist
(
PopBlock
)
{
if
pub
.
NotExist
(
PopBlock
)
{
go
pub
.
Msg
(
`火绒窗口拦截工具没有安装,请先从小工具中"软件安装"中进行安装`
)
go
Msg
(
`火绒窗口拦截工具没有安装,请先从小工具中"软件安装"中进行安装`
)
return
return
}
}
pub
.
SendServerExec
(
pub
.
GJexecDIYFlag
(
pub
.
Msg_Exec_OpenAdminEXE
,
PopBlock
))
pub
.
SendServerExec
(
pub
.
GJexecDIYFlag
(
pub
.
Msg_Exec_OpenAdminEXE
,
PopBlock
,
User_sessionID
))
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-火绒窗口拦截工具"
)
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-火绒窗口拦截工具"
)
}
}
...
@@ -380,16 +380,16 @@ func tSoftwareInstall() {
...
@@ -380,16 +380,16 @@ func tSoftwareInstall() {
if
pub
.
NotExist
(
softpath
)
{
if
pub
.
NotExist
(
softpath
)
{
pub
.
Execcmd_wait
(
"gpupdate /force /target:user"
)
pub
.
Execcmd_wait
(
"gpupdate /force /target:user"
)
}
}
softname
:=
pub
.
C
hooseFile
(
"请选择安装包"
,
softpath
)
softname
:=
c
hooseFile
(
"请选择安装包"
,
softpath
)
if
softname
==
""
{
if
softname
==
""
{
return
return
}
}
if
strings
.
HasPrefix
(
softname
,
softpath
)
{
if
strings
.
HasPrefix
(
softname
,
softpath
)
{
softname
=
strings
.
TrimPrefix
(
softname
,
softpath
)
softname
=
strings
.
TrimPrefix
(
softname
,
softpath
)
go
pub
.
Msg
(
"正在复制安装包,请稍等!"
)
go
Msg
(
"正在复制安装包,请稍等!"
)
pub
.
SendServerExec
(
pub
.
GJexecInstallSoftware
(
softname
))
pub
.
SendServerExec
(
pub
.
GJexecInstallSoftware
(
softname
,
User_sessionID
))
}
else
{
}
else
{
go
pub
.
Msg
(
"安装失败:不是指定的文件路径!"
)
go
Msg
(
"安装失败:不是指定的文件路径!"
)
}
}
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-软件安装"
)
pub
.
LOG
(
INFO
,
"USERS_TOOLS"
,
"执行 其他工具-软件安装"
)
...
...
users/users.go
View file @
d6cacfef
...
@@ -11,6 +11,7 @@ void getMouse()
...
@@ -11,6 +11,7 @@ void getMouse()
import
"C"
import
"C"
import
(
import
(
pub
"AD-Control-Golang/public"
pub
"AD-Control-Golang/public"
reg
"AD-Control-Golang/registry"
"fmt"
"fmt"
"os"
"os"
"time"
"time"
...
@@ -18,6 +19,9 @@ import (
...
@@ -18,6 +19,9 @@ import (
"github.com/lxn/walk"
"github.com/lxn/walk"
)
)
var
User_sid
string
=
reg
.
Query_key_one
(
reg
.
HKCU
,
`Software\Microsoft\Windows\CurrentVersion\FileAssociations`
,
"UserSid"
)
var
User_sessionID
string
=
reg
.
Query_item_one
(
reg
.
HKU
,
User_sid
+
`\Volatile Environment`
)
const
INFO
=
pub
.
INFO
const
INFO
=
pub
.
INFO
const
ERROR
=
pub
.
ERROR
const
ERROR
=
pub
.
ERROR
const
NULL
=
pub
.
NULL
const
NULL
=
pub
.
NULL
...
@@ -81,7 +85,7 @@ func isActive() {
...
@@ -81,7 +85,7 @@ func isActive() {
// 如果处于闲置状态
// 如果处于闲置状态
if
ox
==
x
&&
oy
==
y
{
if
ox
==
x
&&
oy
==
y
{
pub
.
MsgShutdown
(
"即将关机,如需取消,点击小工具-电源管理-取消关机计时"
)
MsgShutdown
(
"即将关机,如需取消,点击小工具-电源管理-取消关机计时"
)
}
}
}
}
...
@@ -99,7 +103,7 @@ func userEnvInit() {
...
@@ -99,7 +103,7 @@ func userEnvInit() {
}
}
func
main
()
{
func
main
()
{
if
pub
.
Adserver
()
{
if
pub
.
DomainCotroller
()
&&
pub
.
Windows
()
{
os
.
Exit
(
-
1
)
os
.
Exit
(
-
1
)
}
}
// 用户 初始化
// 用户 初始化
...
@@ -138,7 +142,7 @@ func main() {
...
@@ -138,7 +142,7 @@ func main() {
pub
.
LOG
(
ERROR
,
NULL
,
err
)
pub
.
LOG
(
ERROR
,
NULL
,
err
)
}
}
pub
.
MsgAdvUI
(
ni
,
"运维小工具已运行"
)
MsgAdvUI
(
ni
,
"运维小工具已运行"
)
timeout
=
time
.
Now
()
timeout
=
time
.
Now
()
pub
.
LOG
(
INFO
,
NULL
,
"start!"
)
pub
.
LOG
(
INFO
,
NULL
,
"start!"
)
...
...
users/walk.go
0 → 100644
View file @
d6cacfef
package
main
import
(
pub
"AD-Control-Golang/public"
"github.com/lxn/walk"
)
func
chooseFile
(
explain
,
initDir
string
)
string
{
fg
:=
new
(
walk
.
FileDialog
)
fg
.
Title
=
explain
fg
.
InitialDirPath
=
initDir
fg
.
ShowOpen
(
*
new
(
walk
.
Form
))
return
fg
.
FilePath
}
func
chooseFolder
(
explain
,
initDir
string
)
string
{
fg
:=
new
(
walk
.
FileDialog
)
fg
.
Title
=
explain
fg
.
InitialDirPath
=
initDir
fg
.
ShowBrowseFolder
(
*
new
(
walk
.
Form
))
return
fg
.
FilePath
}
// 显示带确定的消息框
func
Msg
(
message
string
)
{
walk
.
MsgBox
(
*
new
(
walk
.
Form
),
"提示"
,
message
,
walk
.
MsgBoxIconInformation
)
}
// UI:显示带确定和取消的消息框
// 点击确定按钮:返回1,
// 点击取消按钮:返回2
func
Msg_YesNo
(
message
string
)
int
{
return
walk
.
MsgBox
(
*
new
(
walk
.
Form
),
"提示"
,
message
,
walk
.
MsgBoxOKCancel
)
}
// 提示并关机
func
MsgShutdown
(
msg
string
)
{
go
Msg
(
msg
)
pub
.
Execcmd_nowait
(
pub
.
Msg_Exec_TurnOffPC_cmd
)
}
// 高级UI提示消息
func
MsgAdvUI
(
ni
*
walk
.
NotifyIcon
,
message
string
)
{
ni
.
ShowCustom
(
"提示"
,
message
,
nil
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment