Commit 8d592ff9 by 陶腾飞

v1.0:强制备份用文件,输出日志并由filebeat发送到elk,修复一堆错误

parent 120e6a71
*.bat *.bat
*.ps1 *.ps1
/*test /*test
/*.exe /*.exe
\ No newline at end of file /logs
\ No newline at end of file
No preview for this file type
No preview for this file type
package main package main
import ( import (
"AD-Control/public" "AD-Control/public"
"time"
"flag" "flag"
) )
func main(){ func main(){
var reportText = flag.String(public.Msg_Report,"","report to AD") public.Loger = public.NewLoger(public.Dir_tmp + `\adct.log`)
var backupText = flag.String(public.Msg_Backup,"","backup status to AD") var backupText = flag.String(public.Msg_Backup,"","backup status to AD")
var reportText = flag.String(public.Msg_Report,"","report to AD")
var execText = flag.String(public.Msg_Exec,"","exec to LocalDaemon") var execText = flag.String(public.Msg_Exec,"","exec to LocalDaemon")
var regText = flag.String(public.Msg_Reg,"","mod reg")
var userText = flag.String("user","","who is running me") var userText = flag.String("user","","who is running me")
var wolmacText = flag.String("wolmac","","input mac address for wake pc") var wolmacText = flag.String("wolmac","","input mac address for wake pc")
var woluserText = flag.String("woluser","","input name for walk pc") var woluserText = flag.String("woluser","","input name for walk pc")
...@@ -22,12 +25,14 @@ func main(){ ...@@ -22,12 +25,14 @@ func main(){
if *reportText != "" { flag_report(reportText,userText)} if *reportText != "" { flag_report(reportText,userText)}
if *backupText != "" { flag_bakcup(backupText)} if *backupText != "" { flag_bakcup(backupText)}
if *execText != "" { flag_exec(execText)} if *execText != "" { flag_exec(execText)}
if *regText != "" { flag_reg(regText)}
if *wolmacText != "" { flag_wolmac(wolmacText)} if *wolmacText != "" { flag_wolmac(wolmacText)}
if *woluserText != "" { flag_woluser(woluserText)} if *woluserText != "" { flag_woluser(woluserText)}
return return
} }
func flag_report(s *string,user * string){ func flag_report(s *string,user * string){
switch *s { switch *s {
case public.Msg_Report_UserStart: case public.Msg_Report_UserStart:
public.Reg_Write_DC( public.Reg_Write_DC(
...@@ -36,85 +41,65 @@ func flag_report(s *string,user * string){ ...@@ -36,85 +41,65 @@ func flag_report(s *string,user * string){
public.Reg_Write_DC( public.Reg_Write_DC(
public.Reg_Name_loginTime, public.Reg_Name_loginTime,
public.GetStrTime()) public.GetStrTime())
public.SendServer(public.GJreport(*s,*user))
case public.Msg_Report_StartBak: case public.Msg_Report_StartBak:
lastLoginUser := public.Reg_Query_DC(public.Reg_Name_loginUserName)
lastBackupUser := public.Reg_Query_DC(public.Reg_Name_BackupUserName) var name string = public.Reg_Query_DC(public.Reg_Name_loginUserName)
lasttime := public.Reg_Query_DC(public.Reg_Name_BackupOverTime) public.SendServer(public.GJreport(public.Msg_Report_StartBak,name))
var name string
if lastBackupUser == ""{
if lastLoginUser == ""{
return
} else {
name = lastLoginUser
}
}else{
name = lastBackupUser
}
var dt public.DoTime
dt.Str = lasttime
// 如果不存在上次登录 或者 超过5小时备份时间
if dt.BeforeHour(5){
public.SendServer(public.GJreport(public.Msg_Report_StartBak,name))
}
case public.Msg_Report_OverBak: case public.Msg_Report_OverBak:
public.Reg_Write_DC(public.Reg_Name_loginUserName,*user) var name string = public.Reg_Query_DC(public.Reg_Name_loginUserName)
public.Reg_Write_DC(public.Reg_Name_BackupUserName,name)
public.Reg_Write_DC(public.Reg_Name_BackupOverTime,public.GetStrTime()) public.Reg_Write_DC(public.Reg_Name_BackupOverTime,public.GetStrTime())
public.SendServer(public.GJreport(public.Msg_Report_OverBak,name))
} }
public.SendServer(public.GJreport(*s,*user))
} }
func flag_bakcup(s *string){ func flag_bakcup(s *string){
; ;
} }
func flag_exec(s * string){ func flag_exec(s * string){
public.SendServerExec(*s)
}
func flag_reg(s * string){
; ;
} }
func flag_wolmac(mac * string){ func flag_wolmac(mac * string){
if err := public.Wol(*mac); err != nil{ if err := public.Wol(*mac); err != nil{
public.PrintLog(err) public.PntWol(err)
} else { } else {
public.PrintLog(*mac) public.PntWol(*mac)
} }
} }
func flag_woluser(user * string){ func flag_woluser(user * string){
public.PrintLog("暂未开发") public.PntWol("暂未开发")
} }
func flag_hour(){ func flag_hour(){
nh := time.Now().Hour() nh := public.GetHour()
switch nh{ switch nh{
case 0: case 0:
shutdown() public.SendServerExec(public.Msg_Exec_CloseWindows)
break break
case 1: case 1:
shutdown() public.SendServerExec(public.Msg_Exec_CloseWindows)
break break
case 2: case 2:
shutdown() public.SendServerExec(public.Msg_Exec_CloseWindows)
break break
case 3: case 3:
shutdown() public.SendServerExec(public.Msg_Exec_CloseWindows)
break break
case 4: case 4:
shutdown() public.SendServerExec(public.Msg_Exec_CloseWindows)
break break
case 5:
shutdown()
break
case 6:
default : default :
break break
} }
}
func shutdown(){
public.MsgBox(`5分钟后,即将关机,或者运行Z:\tools\【工具】取消关机.bat`)
public.Execcmd_nowait("shutdown -s -t 300")
}
func reboot(){
public.MsgBox(`5分钟后,即将重启,或者运行Z:\tools\【工具】取消关机.bat`)
public.Execcmd_nowait("shutdown -r -t 300")
} }
\ No newline at end of file
No preview for this file type
...@@ -10,16 +10,13 @@ import ( ...@@ -10,16 +10,13 @@ import (
// 守护进程 初始化 // 守护进程 初始化
func daemonInit(){ func daemonInit(){
// 1 创建文件夹 // 1 创建文件夹
for _,i := range public.User_Dir_Be{ for _,i := range public.Dir_Be{
if public.NotExist(i){ if public.NotExist(i){
public.Mkdir(i) public.Mkdir(i)
} }
} }
public.PrintLog(public.Msg_Report_DaemonStart) if public.Adserver() {
if adserver() {
// 2 初始化 微盘复制状态 // 2 初始化 微盘复制状态
public.CopyStatusWeDrive = make(map[string]bool) public.CopyStatusWeDrive = make(map[string]bool)
public.CopyStatusWeDrive[public.Zhiwei_Dept_HB] = true public.CopyStatusWeDrive[public.Zhiwei_Dept_HB] = true
...@@ -31,10 +28,16 @@ func daemonInit(){ ...@@ -31,10 +28,16 @@ func daemonInit(){
public.CopyStatusWeDrive[public.Zhiwei_Dept_BGYJZX] = true public.CopyStatusWeDrive[public.Zhiwei_Dept_BGYJZX] = true
public.CopyStatusWeDrive[public.Zhiwei_Dept_TECH] = true public.CopyStatusWeDrive[public.Zhiwei_Dept_TECH] = true
// 日志文件位置:主控源文件的源文件目录
public.Loger = public.NewLoger(`C:\Users\Administrator\go\src\AD-Control\logs\daemon.log`)
} else { } else {
// 2 发送 Daemon Start // 日志文件位置:域计算机的备份目录:C:\windows\temp
public.Loger = public.NewLoger(public.Dir_tmp + `\daemon.log`)
// 发送 Daemon Start
public.SendServerReport(public.Msg_Report_DaemonStart) public.SendServerReport(public.Msg_Report_DaemonStart)
} }
} }
// 守护进程 运行 // 守护进程 运行
...@@ -42,18 +45,15 @@ func deamonRun(){ ...@@ -42,18 +45,15 @@ func deamonRun(){
daemonHost := public.User_computername daemonHost := public.User_computername
listener, err := net.Listen("tcp", public.DaemonListen) listener, err := net.Listen("tcp", public.DaemonListen)
if err != nil { if err != nil {
public.PrintLog("Listen Error ", err) public.PntInfo("Listen Error ", err)
return return
} }
defer listener.Close() defer listener.Close()
for{ for{
//public.PrintLog(daemonHost," Conn Listen")
if conn, err := listener.Accept(); err == nil { if conn, err := listener.Accept(); err == nil {
// 新建 读取流 // 新建 读取流
if bmsg,cerr:= bufio.NewReader(conn).ReadBytes(public.EndSign) ; cerr != io.EOF { if bmsg,cerr:= bufio.NewReader(conn).ReadBytes(public.EndSign) ; cerr != io.EOF {
// 测试消息流
//public.PrintLog(string(bmsg))
// 获取ip // 获取ip
ip := public.GetConnIP(conn.RemoteAddr()) ip := public.GetConnIP(conn.RemoteAddr())
...@@ -67,15 +67,15 @@ func deamonRun(){ ...@@ -67,15 +67,15 @@ func deamonRun(){
// 写入连接 // 写入连接
conn.Write(rec) conn.Write(rec)
}else{ }else{
public.PrintLog(daemonHost," Conn Read Error ", cerr) public.PntInfo(daemonHost," Conn Read Error ", cerr)
} }
// 关闭连接 // 关闭连接
if err := conn.Close() ; err!= nil{ if err := conn.Close() ; err!= nil{
public.PrintLog(err) public.PntInfo(err)
} }
continue continue
}else{ }else{
public.PrintLog(daemonHost," Listen Error ", err) public.PntInfo(daemonHost," Listen Error ", err)
} }
} }
...@@ -85,11 +85,4 @@ func main() { ...@@ -85,11 +85,4 @@ func main() {
daemonInit() daemonInit()
deamonRun() deamonRun()
} }
func adserver() bool{
if public.Env_MainADHostname == public.User_computername {return true}
return false
}
func notadserver() bool{
if public.Env_MainADHostname != public.User_computername {return true}
return false
}
This source diff could not be displayed because it is too large. You can view the blob instead.
package public package public
// AD-Control env // AD-Control //
const DaemonPort string = "16823" const Host_adserver string = "ADSERVER"
const DaemonListen string = ":" + DaemonPort const DaemonPort string = "16823"
const ADServerDaemon string = Env_MainADHostname + DaemonListen const DaemonListen string = ":" + DaemonPort
var LocalDaemon string = User_computername + DaemonListen const ADServerDaemon string = Host_adserver + DaemonListen
const DocuBase string = `C:\Users\Public\Documents\AD-Control\` var LocalDaemon string = User_computername + DaemonListen
const RandMax int = 60 const RandMax int = 60
const Version string = "0.9" const Version string = "10.0"
const Application string = "AD-Control-Log"
// user env /////////////////////////////////////////////////////////////// // user //
var User_profile string = GetEnv("USERPROFILE") var User_profile string = GetEnv("USERPROFILE")
var User_name string = GetEnv("USERNAME") 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_appdata string = GetEnv("appdata")
var User_fqdn_cn string = GetEnvFqdn("CN") var User_name string = GetEnv("USERNAME")
var User_dept_str string = GetEnvFqdn("OU") var User_name_display string = GetEnvFqdn("CN")
var User_dept string = GetEnv("DEPT") var User_dept string = GetEnv("DEPT")
var User_appdata string = GetEnv("appdata") var User_dept_display string = GetEnvFqdn("OU")
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_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_Dir_WeDrive = [2] string {User_appdata + `\Tencent\WXWork\Data`,User_profile + `\Documents\WXWork`} // SMB //
const User_Dir_DCSave string = `D:\DomainUserBackup`
var User_Die_WeDriveBackup string = User_Dir_DCSave + `\` + User_name + `\WeDriveBackup`
var User_Dir_Be =[2]string {DocuBase,User_Die_WeDriveBackup}
// win-computer env ///////////////////////////////////////////////////// const SMB_adserver string = `\\` + Host_adserver + `\`
const SMB_ADSoft string = SMB_adserver + `software\`
const SMB_ADMain string = SMB_adserver + `ADMAIN\`
var SMB_ADMainDept string = SMB_ADMain + User_dept_display
var SMB_ADMainDeptShare string = SMB_ADMain + User_dept_display + `\` + "部门共享"
const SMB_ADSoftlike string = SMB_ADSoft + "softlike"
const SMB_ADSoftApplication string = SMB_ADSoft + `application\`
const SMB_ADSoftTool string = SMB_ADSoft + `tools\`
const SMB_ADSoftOthTool string = SMB_ADSoft + `othtools\`
const Env_FreeFileSyncExe string = `C:\Progra~2\zhiwei\FreeFileSync_10.22\FreeFileSync.exe`
// Local Folder //
// AD env /////////////////////////////////////////////////////////// const Dir_DocuBase string = `C:\Users\Public\Documents\AD-Control\`
const Dir_ADsoftware_local string = `F:\software\softlike\`
var Dir_Windows string = GetEnv("windir") + `\`
const Dir_dept_share string = "办公室部门内部共享"
var Dir_dept_share_full string = Reg_Value_WeDriveDir + `\` + Dir_dept_share
const Dir_DCSave string = `D:\DomainUserBackup`
var Dir_WeDrive = [2] string {User_appdata + `\Tencent\WXWork\Data`,User_profile + `\Documents\WXWork`}
var Dir_WeDriveBackup string = Dir_DCSave + `\` + User_name + `\WeDriveBackup`
var Dir_Be = [2]string {Dir_DocuBase,Dir_WeDriveBackup}
var Dir_tmp string = GetEnv("tmp")
const Env_MainADHostname string = "ADSERVER" // application ////
const Env_SMBAdserver string = `\\` + Env_MainADHostname + `\`
const Env_ADSoft string = Env_SMBAdserver + "software"
const Env_ADMain string = Env_SMBAdserver + "ADMAIN"
var Env_ADMainDept string = Env_ADMain + `\` + User_dept_str
var Env_ADMainDeptShare string = Env_ADMain + `\` + User_dept_str + `\` + "部门共享"
const Env_ADSoftlike string = Env_ADSoft + `\` + "softlike"
const Env_ADSoftApplication string = Env_ADSoft + `\` + "application" + `\`
const Env_ADSoftTool string = Env_ADSoft + `\` + "tools" + `\`
const Env_ADSoftOthTool string = Env_ADSoft + `\` + `othtools\`
const Env_ADsoftware_local string = `F:\software\softlike\` const App_adct string = SMB_ADSoftApplication + "adct.exe"
const App_MultiSplit string = SMB_ADSoftOthTool + "win_MultiSplit.exe"
const App_FreeFileSyncExe string = `C:\Progra~2\zhiwei\FreeFileSync_10.22\FreeFileSync.exe`
//const App_MulitOpenPages string = SMB_ADOtherTool + "MultiOpenPages.bat"
// AD User env //
// application //////////////////////////////////////////////////////////////// const AD_User_main_admin string = "zhiweiadserver"
const AD_User_tengfei string = "tengfei"
const AD_User_taotengfei string = "taotengfei"
const AD_User_huyibo string = "huyibo"
const AD_User_xuwenqiang string = "xuwenqiang"
const App_adct string = Env_ADSoftApplication + "adct.exe"
const App_MultiSplit string = Env_ADSoftOthTool + "win_MultiSplit.exe"
//const App_MulitOpenPages string = Env_ADOtherTool + "MultiOpenPages.bat"
// AD User env //////////////////////////////////////////////////////////////// const Zhiwei_Dept_HB string = "HB"
const Zhiwei_Dept_LP string = "LP"
const Zhiwei_Dept_MT string = "MT"
const Zhiwei_Dept_JR string = "JR"
const Zhiwei_Dept_JD string = "JD"
const Zhiwei_Dept_TXHD string = "TXHD"
const Zhiwei_Dept_TXWJ string = "TXWJ"
const Zhiwei_Dept_BGYJZX string = "BGYJZX"
const Zhiwei_Dept_TECH string = "TECH"
const Zhiwei_Dept_Count = 9
const AD_User_main_admin string = "zhiweiadserver"
const AD_User_tengfei string = "tengfei"
const AD_User_taotengfei string = "taotengfei"
const AD_User_huyibo string = "huyibo"
const AD_User_xuwenqiang string = "xuwenqiang"
// backup //
const Zhiwei_Dept_HB string = "HB" var BackupVersion string = "0603"
const Zhiwei_Dept_LP string = "LP" var BackupExtFile string = ".ffs_batch"
const Zhiwei_Dept_MT string = "MT" var BackupReplaceKey =[]byte("-tengfei-")
const Zhiwei_Dept_JR string = "JR"
const Zhiwei_Dept_JD string = "JD"
const Zhiwei_Dept_TXHD string = "TXHD"
const Zhiwei_Dept_TXWJ string = "TXWJ"
const Zhiwei_Dept_BGYJZX string = "BGYJZX"
const Zhiwei_Dept_TECH string = "TECH"
const Zhiwei_Dept_Count = 9
// reg info //
// backup env //////////////////////////////////////////////////////////////
var BackupVersion string = "0428"
var BackupExtFile string = ".ffs_batch"
var BackupReplaceKey =[]byte("-tengfei-")
// reg ////////////////////////////////////////////////////////////////////
const ( const (
HKCU = iota HKCU = iota
HKLM HKLM
HKU HKU
) )
const Reg_Root_ac int = HKLM const Reg_Root_ac int = HKLM
const Reg_Root_dc int = HKCU const Reg_Root_dc int = HKCU
const Reg_Path_home string = `SOFTWARE\ADControl`
const Reg_Path_home_dc string = Reg_Path_home + `\DomainComputer\` // use for adserver,not for dc
const Reg_Name_TurnOnTime string = "TurnOnTime"
const Reg_Name_TurnOffTime string = "TurnOffTime"
const Reg_Name_loginUserName string = "loginUser"
const Reg_Name_loginTime string = "loginTime"
const Reg_Name_BackupUserName string = "BackupUserName"
const Reg_Name_BackupOverTime string = "BackupOverTime"
// const Reg_Name_BackupSyncAppName string = "FreeFileSync"
// const Reg_Name_BackupSyncAppParm string = "FreeFileSyncParm"
const Reg_Name_WeDriveDir string = "WeDriveDir"
const Reg_Path_home string = `SOFTWARE\ADControl` // reg value //
const Reg_Path_home_dc string = Reg_Path_home + `\DomainComputer\` // use for adserver,not for dc
const Reg_Name_TurnOnTime string = "TurnOnTime"
const Reg_Name_TurnOffTime string = "TurnOffTime"
const Reg_Name_loginUserName string = "loginUser"
const Reg_Name_loginTime string = "loginTime"
const Reg_Name_BackupUserName string = "BackupUserName"
const Reg_Name_BackupOverTime string = "BackupOverTime"
const Reg_Name_WeDriveDir string = "WeDriveDir"
var Reg_Value_WeDriveDir string = Reg_query_key_one(HKCU,Reg_Path_home,Reg_Name_WeDriveDir)
// reg value /////////////////////////////////////////////////////////////////
var Reg_Value_WeDriveDir string = Reg_query_key_one(HKCU,Reg_Path_home,Reg_Name_WeDriveDir)
// other env /////////////////////////////////////////////////////////////// // other //
const Link_WxworkBot string = `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=59107f72-5b72-4a20-a33c-fdb1cd46f2c6` const Link_WxworkBot string = `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=59107f72-5b72-4a20-a33c-fdb1cd46f2c6`
const Cmdk string = "cmd /k " const Cmd_k string = "cmd /k "
const Startk string = "cmd /k start " const Cmd_K_Start string = "cmd /k start "
var Dir_Windows string = GetEnv("windir") + `\` var CopyStatusWeDrive map [string]bool
const Zhiwei_WxDrive_Folder string = "办公室部门内部共享" \ No newline at end of file
var Zhiwei_WxDrive_Full_Folder string = Reg_Value_WeDriveDir + `\`+Zhiwei_WxDrive_Folder
var CopyStatusWeDrive map [string]bool
...@@ -5,35 +5,42 @@ package public ...@@ -5,35 +5,42 @@ package public
// //
func DealMsgEnter(ip string,msgtype string,unmsg []byte) []byte { func DealMsgEnter(ip string,msgtype string,unmsg []byte) []byte {
PrintLog("DEAL ",string(unmsg))
var ret interface{} var ret interface{}
switch msgtype{ switch msgtype{
// 报告 消息 // 报告 消息
case Msg_Report: case Msg_Report:
var pmsg MJreport var pmsg MJreport
PntReport(string(unmsg))
ParseJsonBody(unmsg,&pmsg) ParseJsonBody(unmsg,&pmsg)
ret = pmsg.Msg_Deal() ret = pmsg.Msg_Deal()
// 执行 消息 // 执行 消息
case Msg_Exec: case Msg_Exec:
var pmsg MJexec var pmsg MJexec
PntExec(string(unmsg))
ParseJsonBody(unmsg,&pmsg) ParseJsonBody(unmsg,&pmsg)
ret = pmsg.Msg_Deal() ret = pmsg.Msg_Deal()
// 备份 消息 // 备份 消息
case Msg_Backup: case Msg_Backup:
var pmsg MJbackup var pmsg MJbackup
PntBackup(string(unmsg))
ParseJsonBody(unmsg,&pmsg) ParseJsonBody(unmsg,&pmsg)
ret = pmsg.Msg_Deal() ret = pmsg.Msg_Deal()
// 注册表 消息 // 注册表 消息
case Msg_Reg: case Msg_Reg:
var pmsg MJreg var pmsg MJreg
PntReg(string(unmsg))
ParseJsonBody(unmsg,&pmsg) ParseJsonBody(unmsg,&pmsg)
ret = pmsg.Msg_Deal() ret = pmsg.Msg_Deal()
// 错误 消息 // 错误 消息
case Msg_Error: case Msg_Error:
SendWX(string(unmsg)) PntError(string(unmsg))
var pmsg MJerror
ParseJsonBody(unmsg,&pmsg)
ret = pmsg.Msg_Deal()
return nil return nil
} }
...@@ -50,27 +57,15 @@ func DealMsgEnter(ip string,msgtype string,unmsg []byte) []byte { ...@@ -50,27 +57,15 @@ func DealMsgEnter(ip string,msgtype string,unmsg []byte) []byte {
func (rep *MJreport)Msg_Deal() interface{} { func (rep *MJreport)Msg_Deal() interface{} {
switch rep.Report{ switch rep.Instruction{
case Msg_Report_Offwork: case Msg_Report_Offwork:
return GJbackup() return GJbackup()
case Msg_Report_StartBak: case Msg_Report_StartBak:
return GJbackup() return GJbackup()
case Msg_Report_OverBak: case Msg_Report_OverBak:
SysMsgBox(rep.Computername,"备份结束") SysMsgBox(rep.Computername,`即将关机,如需取消关机,运行Z:\tools\【工具】取消关机.bat或在小工具-电源管理-取消自动关机`)
Reg_Write_key_one(
Reg_Root_ac,
Reg_Path_home_dc + rep.Computername,
Reg_Name_BackupUserName,
UnixTimeParse(&rep.Timestamp))
Reg_Write_key_one(
Reg_Root_ac,
Reg_Path_home_dc + rep.Computername,
Reg_Name_BackupOverTime,
UnixTimeParse(&rep.Timestamp))
return GJexecAck(Msg_Exec_CloseWindows) return GJexecAck(Msg_Exec_CloseWindows)
case Msg_Report_CloseWindows: case Msg_Report_CloseWindows:
Reg_Write_key_one( Reg_Write_key_one(
Reg_Root_ac, Reg_Root_ac,
...@@ -106,7 +101,7 @@ func (rep *MJreport)Msg_Deal() interface{} { ...@@ -106,7 +101,7 @@ func (rep *MJreport)Msg_Deal() interface{} {
}() }()
default: default:
PrintLog("Default Report Json ",rep.Report) PntOth("Default Report Json ",rep.Instruction)
} }
return nil return nil
...@@ -132,8 +127,7 @@ func (exec *MJexec)Msg_Deal()interface{}{ ...@@ -132,8 +127,7 @@ func (exec *MJexec)Msg_Deal()interface{}{
case Msg_Exec_RebootWindows: case Msg_Exec_RebootWindows:
exec.Command = Msg_Exec_RebootWindows_cmd exec.Command = Msg_Exec_RebootWindows_cmd
case Msg_Exec_UpdateVersion:
Exit()
} }
...@@ -150,6 +144,7 @@ func (exec *MJexec)Msg_Deal()interface{}{ ...@@ -150,6 +144,7 @@ func (exec *MJexec)Msg_Deal()interface{}{
return nil return nil
} }
} }
exec.Status = Msg_Exec_State_Ack
return exec return exec
case Msg_Exec_State_Ack: case Msg_Exec_State_Ack:
...@@ -166,7 +161,7 @@ func (exec *MJexec)Msg_Deal()interface{}{ ...@@ -166,7 +161,7 @@ func (exec *MJexec)Msg_Deal()interface{}{
// 从\\adserver安装 // 从\\adserver安装
// 共享则需要everyone的读取权限 // 共享则需要everyone的读取权限
if HasSuffix(&exec.Command,".msi"){ if HasSuffix(&exec.Command,".msi"){
full_cmd := "msiexec /i " + Env_ADSoftlike + `\` + exec.Command + " /qb" full_cmd := "msiexec /i " + SMB_ADSoftlike + `\` + exec.Command + " /qb"
PsExec_sdi(exec.Computername,full_cmd,exec.SessionID) PsExec_sdi(exec.Computername,full_cmd,exec.SessionID)
// 对于 exe 格式 // 对于 exe 格式
...@@ -176,7 +171,7 @@ func (exec *MJexec)Msg_Deal()interface{}{ ...@@ -176,7 +171,7 @@ func (exec *MJexec)Msg_Deal()interface{}{
PsExec_sdi(exec.Computername,Dir_Windows + exec.Command,exec.SessionID) PsExec_sdi(exec.Computername,Dir_Windows + exec.Command,exec.SessionID)
// 如果文件不存在,从 ADMIN$ 复制到C:\windows,再执行 // 如果文件不存在,从 ADMIN$ 复制到C:\windows,再执行
} else { } else {
PsExec_sdic(exec.Computername,Env_ADsoftware_local + exec.Command,exec.SessionID) PsExec_sdic(exec.Computername,Dir_ADsoftware_local + exec.Command,exec.SessionID)
} }
} }
} }
...@@ -190,7 +185,7 @@ func (exec *MJexec)Msg_Deal()interface{}{ ...@@ -190,7 +185,7 @@ func (exec *MJexec)Msg_Deal()interface{}{
case Msg_Exec_CopyWeDrive: case Msg_Exec_CopyWeDrive:
reg_Value_WeDriveDir := Reg_query_key_one(HKCU,Reg_Path_home,Reg_Name_WeDriveDir) reg_Value_WeDriveDir := Reg_query_key_one(HKCU,Reg_Path_home,Reg_Name_WeDriveDir)
cmd := `cmd /c xcopy ` + Env_ADMainDeptShare + " /D " + reg_Value_WeDriveDir + `\` + Zhiwei_WxDrive_Folder + " /S /T /E /C /y" cmd := `cmd /c xcopy ` + SMB_ADMainDeptShare + " /D " + reg_Value_WeDriveDir + `\` + Dir_dept_share + " /S /T /E /C /y"
Execcmd_wait(cmd) Execcmd_wait(cmd)
SendServerReport(Msg_Report_OverCopyToWeDrive) SendServerReport(Msg_Report_OverCopyToWeDrive)
...@@ -215,15 +210,15 @@ func (bak * MJbackup)Msg_Deal() interface{}{ ...@@ -215,15 +210,15 @@ func (bak * MJbackup)Msg_Deal() interface{}{
bak.Explain = "Backup Start" bak.Explain = "Backup Start"
bak.Status = Msg_Backup_Status_If bak.Status = Msg_Backup_Status_If
bak.Version = BackupVersion bak.Version = BackupVersion
bak.BatchFileName = DocuBase + bak.Version + bak.Username + BackupExtFile bak.BatchFileName = Dir_DocuBase + bak.Version + bak.Username + BackupExtFile
//PrintLog("收集D盘剩余空间,查询主用户") // maybe:收集D盘剩余空间
PrintLog(bak.Explain) PntReport(bak.Explain)
//如果Start可以,并且得到了主用户 //如果Start可以,并且得到了主用户
//判断是否有最新版本的文件是否存在 //判断是否有最新版本的文件是否存在
if NotExist(Env_FreeFileSyncExe){ if NotExist(App_FreeFileSyncExe){
SendServerError("FreeFileSync hasn't been installed") SendServerError("FreeFileSync hasn't been installed")
return nil return nil
} }
...@@ -247,32 +242,32 @@ func (bak * MJbackup)Msg_Deal() interface{}{ ...@@ -247,32 +242,32 @@ func (bak * MJbackup)Msg_Deal() interface{}{
bak.Version = BackupVersion bak.Version = BackupVersion
} }
bak.Explain = "Backup Fill In BatchFile" bak.Explain = "Backup Fill In BatchFile"
bak.Status = Msg_Backup_Status_Continue bak.Status = Msg_Backup_Status_Continue
// 交给daemon 处理 Msg_Backup_Status_Continue // 交给daemon 处理 Msg_Backup_Status_Continue
SendMsg(bak.Computername + DaemonListen,bak) SendMsg(bak.Computername + DaemonListen,bak)
return nil return nil
case Msg_Backup_Status_Continue: case Msg_Backup_Status_Continue:
// 生成新FFS所使用的batch文件 // 生成新FFS所使用的batch文件
bak.BatchFileName = DocuBase + bak.Version + bak.Username + BackupExtFile bak.BatchFileName = Dir_DocuBase + bak.Version + bak.Username + BackupExtFile
if !bak.BatchFileExist{ if !bak.BatchFileExist{
PrintLog("init ",string(bak.BatchFileName)) PntReport("init ",string(bak.BatchFileName))
if err := WriteBytesFile(bak.BatchFileName,bak.BatchFileData);err !=nil{ if err := WriteBytesFile(bak.BatchFileName,bak.BatchFileData);err !=nil{
SendServerError("Write Batch File Error "+err.Error()) SendServerError("Write Batch File Error "+err.Error())
return bak
} }
} }
bak.Status = Msg_Backup_Status_Run bak.Status = Msg_Backup_Status_Run
bak.Explain = "Backup Ready" bak.Explain = "Backup Ready"
return bak return bak
case Msg_Backup_Status_Run: case Msg_Backup_Status_Run:
//SysMsgBox(bak.Computername,bak.Username + " 开始备份") SysMsgBox(bak.Computername,bak.Username + " 开始备份")
PsExec_sd(bak.Computername,Env_FreeFileSyncExe + " "+ bak.BatchFileName) PsExec_sd(bak.Computername,App_FreeFileSyncExe + " "+ bak.BatchFileName)
} }
return nil
return nil
} }
...@@ -290,6 +285,27 @@ func (reg * MJreg)Msg_Deal() interface{}{ ...@@ -290,6 +285,27 @@ func (reg * MJreg)Msg_Deal() interface{}{
// 关于 error 错误 的 消息处理 // 关于 error 错误 的 消息处理
// func (err * MJerror)Msg_Deal() interface{}{ func (err * MJerror)Msg_Deal() interface{}{
// return nil
// } // 为了降低在企业微信的消息频率
\ No newline at end of file // 选择部分主机进行发送消息
send := false
switch err.Computername{
case "LP66-pc":
send =true
case "HB166-pc":
send =true
case "JD138-PC":
send =true
case "TXHD17-PC":
send =true
}
if send{ SendWX(err.Instruction) }
return nil
}
\ No newline at end of file
...@@ -47,7 +47,7 @@ const ( ...@@ -47,7 +47,7 @@ const (
const Msg_Exec_State_Request string = "request" const Msg_Exec_State_Request string = "request"
const Msg_Exec_State_Ack string = "ack" const Msg_Exec_State_Ack string = "ack"
const Msg_Exec_CloseWindows string = "closewindow" const Msg_Exec_CloseWindows string = "closewindow"
const Msg_Exec_CloseWindows_cmd string = "shutdown -s -t 15" const Msg_Exec_CloseWindows_cmd string = "shutdown -s -t 300"
const Msg_Exec_CancelCloseWindows string = "cancelclosewindows" const Msg_Exec_CancelCloseWindows string = "cancelclosewindows"
const Msg_Exec_CancelCloseWindows_cmd string = "shutdown -a" const Msg_Exec_CancelCloseWindows_cmd string = "shutdown -a"
const Msg_Exec_LogOffUser string = "logoffuser" const Msg_Exec_LogOffUser string = "logoffuser"
...@@ -87,18 +87,17 @@ type MJbase struct{ ...@@ -87,18 +87,17 @@ type MJbase struct{
Timestamp int64 `json:"timestamp"` Timestamp int64 `json:"timestamp"`
DataBool bool `json:"databool"` DataBool bool `json:"databool"`
DataStr string `json:"datastr"` DataStr string `json:"datastr"`
Instruction string `json:"instruction"`
} }
// report Json Format ////////////////////////////////////////////////////// // report Json Format //////////////////////////////////////////////////////
type MJreport struct { type MJreport struct {
MJbase MJbase
Report string `json:"report"`
Version string `json:"version"` Version string `json:"version"`
} }
// Exec Json Fromat /////////////////////////////////////////////////////// // Exec Json Fromat ///////////////////////////////////////////////////////
type MJexec struct { type MJexec struct {
MJbase MJbase
Instruction string `json:"instruction"`
Command string `json:"command"` Command string `json:"command"`
Cmder int `josn:"cmder"` Cmder int `josn:"cmder"`
SessionID string `json:"sessionid"` SessionID string `json:"sessionid"`
...@@ -110,7 +109,6 @@ type MJbackup struct{ ...@@ -110,7 +109,6 @@ type MJbackup struct{
MJbase MJbase
Version string `json:"version"` Version string `json:"version"`
DiskFree string `json:"diskfree"` DiskFree string `json:"diskfree"`
//Error bool `json:"error"`
BatchFileExist bool `json:"batchfileexist"` BatchFileExist bool `json:"batchfileexist"`
BatchFileData []byte `json:"batchfiledata"` BatchFileData []byte `json:"batchfiledata"`
BatchFileName string `json:"batchfilename"` BatchFileName string `json:"batchfilename"`
...@@ -150,7 +148,7 @@ func (rep * MJreport)init(Report string) { ...@@ -150,7 +148,7 @@ func (rep * MJreport)init(Report string) {
rep.Timestamp = NowTimestamp() rep.Timestamp = NowTimestamp()
rep.Computername = User_computername rep.Computername = User_computername
rep.MsgType = Msg_Report rep.MsgType = Msg_Report
rep.Report = Report rep.Instruction = Report
rep.Version = Version rep.Version = Version
} }
...@@ -215,9 +213,9 @@ func (exec * MJexec)init(s string){ ...@@ -215,9 +213,9 @@ func (exec * MJexec)init(s string){
// Backup // Backup
func GJbackup()interface{}{ func GJbackup()interface{}{
var rep MJbackup var bak MJbackup
rep.init() bak.init()
return rep return bak
} }
func (bak * MJbackup)init() { func (bak * MJbackup)init() {
bak.Dept = User_dept bak.Dept = User_dept
...@@ -227,18 +225,19 @@ func (bak * MJbackup)init() { ...@@ -227,18 +225,19 @@ func (bak * MJbackup)init() {
bak.Status = Msg_Backup_Status_Start bak.Status = Msg_Backup_Status_Start
} }
// error // error
func GJerror(s * string) interface{}{ func GJerror(s string)interface{}{
var err MJerror var err MJerror
err.init(s) err.init(s)
return err return err
} }
func (err * MJerror)init(s* string ){ func (err * MJerror)init (s string){
err.Username = User_name err.Username = User_name
err.Dept = User_dept err.Dept = User_dept
err.Timestamp = NowTimestamp() err.Timestamp = NowTimestamp()
err.Computername = User_computername err.Computername = User_computername
err.MsgType = Msg_Error err.MsgType = Msg_Error
err.DataStr = *s err.Instruction = s
} }
\ No newline at end of file
package public package public
import ( import (
"log" "log"
"os"
"fmt"
) )
var Loger * log.Logger
func PrintLog(v ...interface{}){ func PrintLog(v ...interface{}){
log.SetPrefix("Output ")
log.Println(v ...) log.Println(v ...)
} }
func PntInfo(v ...interface{}){
Loger.SetPrefix("Info ")
Loger.Println(v ...)
}
func PntReport(v ...interface{}){
Loger.SetPrefix("Report ")
Loger.Println(v ...)
}
func PntExec(v ...interface{}){
Loger.SetPrefix("Exec ")
Loger.Println(v ...)
}
func PntBackup(v ...interface{}){
Loger.SetPrefix("Bakcup ")
Loger.Println(v ...)
}
func PntReg(v ...interface{}){
Loger.SetPrefix("Reg ")
Loger.Println(v ...)
}
func PntError(v ...interface{}){
Loger.SetPrefix("Error ")
Loger.Println(v ...)
}
func PntOth(v ...interface{}){
Loger.SetPrefix("Other ")
Loger.Println(v ...)
}
func PntWol(v ...interface{}){
Loger.SetPrefix("WOL ")
Loger.Println(v ...)
}
func PntSend(v ...interface{}){
Loger.SetPrefix("Send ")
Loger.Println(v ...)
}
func NewLoger(s string) * log.Logger{
var Log_file_obj * os.File
var err error
if Log_file_obj,err = os.OpenFile(
s,os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766);
err !=nil && DomainComputer(){
SendServerError(fmt.Sprintf("%s 's %s open file error",User_computername,s))
}
return log.New(Log_file_obj,"",log.LstdFlags)
}
\ No newline at end of file
...@@ -17,22 +17,18 @@ import ( ...@@ -17,22 +17,18 @@ import (
// 如果空 输出错误 // 如果空 输出错误
// 但不退出 // 但不退出
func GetEnv(e string) string{ func GetEnv(e string) string{
r := os.Getenv(e) r:= os.Getenv(e)
PrintLog(e,"->",r) PrintLog(e,"->",r)
// 获取为空
if r == "" {
PrintLog("环境错误!")
}
return r return r
} }
func GetEnvFqdn(s string)string{ func GetEnvFqdn(s string)string{
cmd,err := exec.Command("whoami","/fqdn").Output() cmd,err := exec.Command("whoami","/fqdn").Output()
if err !=nil { if err !=nil {
PrintLog(err) PntError(err)
} }
out,err := simplifiedchinese.GBK.NewDecoder().Bytes(cmd) out,err := simplifiedchinese.GBK.NewDecoder().Bytes(cmd)
if err !=nil { if err !=nil {
PrintLog(err) PntError(err)
} }
for _,each := range strings.Split(string(out),","){ for _,each := range strings.Split(string(out),","){
...@@ -56,7 +52,7 @@ func ParseJsonHead(b []byte)string{ ...@@ -56,7 +52,7 @@ func ParseJsonHead(b []byte)string{
func ParseJsonBody(unmsg []byte,v interface{}){ func ParseJsonBody(unmsg []byte,v interface{}){
// 填写 // 填写
if err := json.Unmarshal(unmsg,v) ;err != nil{ if err := json.Unmarshal(unmsg,v) ;err != nil{
PrintLog("Parse Json Error ",err) PntError("Parse Json Error ",err)
} }
} }
...@@ -64,7 +60,7 @@ func ParseJsonBody(unmsg []byte,v interface{}){ ...@@ -64,7 +60,7 @@ func ParseJsonBody(unmsg []byte,v interface{}){
func JsonToByte(v interface{}) []byte{ func JsonToByte(v interface{}) []byte{
textbyte,err := json.Marshal(v) textbyte,err := json.Marshal(v)
if err !=nil { if err !=nil {
PrintLog("Json to String Error ",v,err) PntError("Json to String Error ",v,err)
} }
return textbyte return textbyte
} }
...@@ -103,9 +99,9 @@ func WriteBytesFile(file string ,data []byte)error{ ...@@ -103,9 +99,9 @@ func WriteBytesFile(file string ,data []byte)error{
func CreateExtTempate(dist*string) []byte { func CreateExtTempate(dist*string) []byte {
base := BackupReplaceKey base := BackupReplaceKey
var ret bytes.Buffer var ret bytes.Buffer
file, err := os.Open(DocuBase + BackupVersion + "base"+BackupExtFile) file, err := os.Open(Dir_DocuBase + BackupVersion + "base"+BackupExtFile)
if err != nil { if err != nil {
PrintLog(err) PntError(err)
return nil return nil
} }
defer file.Close() defer file.Close()
...@@ -118,7 +114,6 @@ func CreateExtTempate(dist*string) []byte { ...@@ -118,7 +114,6 @@ func CreateExtTempate(dist*string) []byte {
ret.Write(lineText) ret.Write(lineText)
ret.Write([]byte("\n")) ret.Write([]byte("\n"))
} }
//PrintLog(ret.String())
return ret.Bytes() return ret.Bytes()
} }
...@@ -139,12 +134,12 @@ func Rand(i * int)int{ ...@@ -139,12 +134,12 @@ func Rand(i * int)int{
return rand.Intn(*i) return rand.Intn(*i)
} }
func Delay(i int){ func Delay(i int){
PrintLog("Delay ",i) PntInfo("Delay ",i)
time.Sleep(time.Duration(i) * time.Second) time.Sleep(time.Duration(i) * time.Second)
} }
func RandDelay(i int){ func RandDelay(i int){
ri := Rand(&i) ri := Rand(&i)
PrintLog("RandDelay ",ri) PntInfo("RandDelay ",ri)
time.Sleep(time.Duration(ri) * time.Second) time.Sleep(time.Duration(ri) * time.Second)
} }
...@@ -170,7 +165,7 @@ func ReadDir(s string) ([]os.FileInfo,error){ ...@@ -170,7 +165,7 @@ func ReadDir(s string) ([]os.FileInfo,error){
func GetNewestDir(rdir ,extdir string) string { func GetNewestDir(rdir ,extdir string) string {
f,err := ioutil.ReadDir(rdir) f,err := ioutil.ReadDir(rdir)
if err !=nil{ if err !=nil{
PrintLog(err) PntError(err)
} }
//var filearge := []byte //var filearge := []byte
...@@ -198,12 +193,11 @@ func TrimSuffix(str ,s string)string{ ...@@ -198,12 +193,11 @@ func TrimSuffix(str ,s string)string{
func Exit(){ func Exit(){
os.Exit(0) os.Exit(0)
} }
func NowTimestamp() int64 { func DomainComputer() bool{
return time.Now().Unix() if Host_adserver != User_computername {return true}
} return false
func UnixTimeParse(t *int64) string {
return time.Unix(*t,0).String()
} }
func GetStrTime() string{ func Adserver() bool{
return time.Now().String() if Host_adserver == User_computername {return true}
return false
} }
\ No newline at end of file
...@@ -26,8 +26,9 @@ func SendServerGUIExec(s string){ ...@@ -26,8 +26,9 @@ func SendServerGUIExec(s string){
SendServer(GJexecGUI(s)) SendServer(GJexecGUI(s))
} }
func SendServerError(s string)[]byte{ func SendServerError(s string)[]byte{
return SendServer(GJerror(&s)) return SendServer(GJerror(s))
} }
// send to server // send to server
func SendServer(v interface{})[]byte{ func SendServer(v interface{})[]byte{
return SendMsg(ADServerDaemon,v) return SendMsg(ADServerDaemon,v)
...@@ -37,17 +38,17 @@ func SendMsg(you string ,v interface{})[]byte{ ...@@ -37,17 +38,17 @@ func SendMsg(you string ,v interface{})[]byte{
textbyte,err := json.Marshal(v) textbyte,err := json.Marshal(v)
if err !=nil { if err !=nil {
PrintLog("Json to String Error ",v,err) PntError("Json to String Error ",v,err)
} }
conn, err := net.Dial("tcp", you) conn, err := net.Dial("tcp", you)
if err != nil { if err != nil {
PrintLog("err = ", err) PntError("err = ", err)
} }
//发送数据 //发送数据
conn.Write(textbyte) conn.Write(textbyte)
PrintLog("SEND ",string(textbyte)) PntSend(string(textbyte))
bmsg,cerr:= bufio.NewReader(conn).ReadBytes(EndSign) bmsg,cerr:= bufio.NewReader(conn).ReadBytes(EndSign)
var rec []byte var rec []byte
if cerr != io.EOF { if cerr != io.EOF {
...@@ -61,14 +62,16 @@ func SendMsg(you string ,v interface{})[]byte{ ...@@ -61,14 +62,16 @@ func SendMsg(you string ,v interface{})[]byte{
rec = DealMsgEnter(ip,msgtype,bmsg) rec = DealMsgEnter(ip,msgtype,bmsg)
} }
if err := conn.Close();err !=nil{ if err := conn.Close();err !=nil{
PrintLog("Conn Close ",err) PntError("Conn Close ",err)
} }
return rec return rec
} }
// 发送 到 微信机器人 // 发送 到 微信机器人
func SendWX(Content string){ func SendWX(Content string){
// Content不支持发送Json,
w := []byte(` w := []byte(`
{ {
"msgtype": "text", "msgtype": "text",
......
...@@ -3,31 +3,15 @@ package public ...@@ -3,31 +3,15 @@ package public
import ( import (
"time" "time"
) )
func NowTimestamp() int64 {
// 关于 操作时间 的 结构体 return time.Now().Unix()
type DoTime struct{ }
Str string func UnixTimeParse(t *int64) string {
T time.Time return time.Unix(*t,0).String()
} }
// 判断 是否早于i小时 func GetStrTime() string{
// 返回 是:早于i小时 return time.Now().String()
// 返回 否:晚于i小时
func (dt * DoTime) base(){
if dt.Str != ""{
time.Parse("2020-05-24 17:06:47 +0800 CST",dt.Str)
}
} }
func (dt * DoTime) BeforeHour(i int) bool{ func GetHour() int{
var err error return time.Now().Hour()
if dt.Str != ""{
dt.T,err = time.Parse("2006-01-02 15:04:05.999999999 -0700 MST",dt.Str)
if err !=nil {
PrintLog(err)
return false
}
}
if dt.T.Add(time.Duration(5)*time.Hour).Before(time.Now()){
return true
}
return false
} }
\ No newline at end of file
...@@ -28,42 +28,43 @@ func execcmd_base(cmdargs string) (string,[]string,error){ ...@@ -28,42 +28,43 @@ func execcmd_base(cmdargs string) (string,[]string,error){
app = cmdargs app = cmdargs
appargs[0] = "" appargs[0] = ""
} }
PrintLog(app,appargs) PntInfo(app,appargs)
return app,appargs,nil return app,appargs,nil
} }
func Execcmd_nowait(cmdargs string){ func Execcmd_nowait(cmdargs string){
app,appargs,err :=execcmd_base(cmdargs) app,appargs,err :=execcmd_base(cmdargs)
if err !=nil{ if err !=nil{
PrintLog(err) PntError(err)
return return
} }
if err := exec.Command(app,appargs...).Start();err !=nil { if err := exec.Command(app,appargs...).Start();err !=nil {
PrintLog(err) PntError(err)
} }
} }
func Execcmd_wait(cmdargs string){ func Execcmd_wait(cmdargs string){
app,appargs,err :=execcmd_base(cmdargs) app,appargs,err :=execcmd_base(cmdargs)
if err !=nil{ if err !=nil{
PrintLog(err) PntError(err)
return return
} }
cmd := exec.Command(app,appargs...) cmd := exec.Command(app,appargs...)
if err := cmd.Start(); err != nil { if err := cmd.Start(); err != nil {
PrintLog(err) PntError(err)
} }
PrintLog("Waiting for command to finish...")
err = cmd.Wait() err = cmd.Wait()
PrintLog("Command finished with error: ",err) if err !=nil{
PntError("Command finished with error: ",err)
}
} }
func Execcmd_output(cmdargs string)[]byte{ func Execcmd_output(cmdargs string)[]byte{
app,appargs,err :=execcmd_base(cmdargs) app,appargs,err :=execcmd_base(cmdargs)
if err !=nil{ if err !=nil{
PrintLog(err) PntError(err)
return nil return nil
} }
if out,err2 := exec.Command(app,appargs...).CombinedOutput();err2 !=nil { if out,err2 := exec.Command(app,appargs...).CombinedOutput();err2 !=nil {
PrintLog(err2) PntError(err2)
}else{ }else{
return out return out
} }
...@@ -86,6 +87,7 @@ func OpenWindow(s string){ ...@@ -86,6 +87,7 @@ func OpenWindow(s string){
Execcmd_nowait("explorer "+s) Execcmd_nowait("explorer "+s)
} }
// //
// //
// remote exec // remote exec
...@@ -119,9 +121,11 @@ func Msg(message string) { ...@@ -119,9 +121,11 @@ func Msg(message string) {
func Msg_YesNo(message string) int { func Msg_YesNo(message string) int {
return walk.MsgBox(*new(walk.Form), "提示", message, walk.MsgBoxOKCancel) return walk.MsgBox(*new(walk.Form), "提示", message, walk.MsgBoxOKCancel)
} }
// 调用外部命令的MsgBox
func MsgBox(message string){ func MsgBox(message string){
Execcmd_nowait("msg * /TIME:60 "+ message) Execcmd_nowait("msg * /TIME:60 "+ message)
} }
// 调用外部命令的指定计算机的消息的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)
} }
...@@ -129,7 +133,7 @@ func SysMsgBox(pc,message string){ ...@@ -129,7 +133,7 @@ func SysMsgBox(pc,message string){
// //
// //
// regedit // regedit base
// //
func reg_prase(root * int) registry.Key{ func reg_prase(root * int) registry.Key{
switch *root{ switch *root{
...@@ -143,13 +147,8 @@ func reg_prase(root * int) registry.Key{ ...@@ -143,13 +147,8 @@ func reg_prase(root * int) registry.Key{
return registry.LOCAL_MACHINE return registry.LOCAL_MACHINE
} }
func Reg_Exist_item(root int,path string ) { func Reg_Exist_item(root int,path string ) {
_,exist,err := registry.CreateKey(reg_prase(&root),path,registry.ALL_ACCESS) //_,exist,err :=
if err !=nil { registry.CreateKey(reg_prase(&root),path,registry.ALL_ACCESS)
PrintLog(err)
}
if !exist {
PrintLog("Create ",path)
}
} }
func Reg_query_item_one(root int ,path string) string { func Reg_query_item_one(root int ,path string) string {
if k, kerr := registry.OpenKey(reg_prase(&root),path, registry.READ);kerr==nil{ if k, kerr := registry.OpenKey(reg_prase(&root),path, registry.READ);kerr==nil{
...@@ -157,11 +156,9 @@ func Reg_query_item_one(root int ,path string) string { ...@@ -157,11 +156,9 @@ func Reg_query_item_one(root int ,path string) string {
if sk,err := k.ReadSubKeyNames(1); err ==nil{ if sk,err := k.ReadSubKeyNames(1); err ==nil{
return sk[0] return sk[0]
} else{ } else{
PrintLog(err)
return "" return ""
} }
} else { } else {
PrintLog(kerr)
return "" return ""
} }
} }
...@@ -169,34 +166,26 @@ func Reg_query_key_one(root int, path, key string) string { ...@@ -169,34 +166,26 @@ func Reg_query_key_one(root int, path, key string) string {
if k, kerr := registry.OpenKey(reg_prase(&root),path, registry.READ);kerr==nil{ if k, kerr := registry.OpenKey(reg_prase(&root),path, registry.READ);kerr==nil{
defer k.Close() defer k.Close()
if sk,_,err := k.GetStringValue(key); err ==nil{ if sk,_,err := k.GetStringValue(key); err ==nil{
PrintLog(root,path,key,` -> `,sk)
return sk return sk
} else{ } else{
PrintLog(err)
return "" return ""
} }
} else { } else {
PrintLog(kerr)
return "" return ""
} }
} }
func Reg_Write_key_one(root int, path, name, value string) { func Reg_Write_key_one(root int, path, name, value string) {
if k, kerr := registry.OpenKey(reg_prase(&root),path, registry.WRITE);kerr==nil{ if k, kerr := registry.OpenKey(reg_prase(&root),path, registry.WRITE);kerr==nil{
defer k.Close() defer k.Close()
if err := k.SetStringValue(name, value); err !=nil{ k.SetStringValue(name, value)
PrintLog(err)
}
} else {
PrintLog(kerr)
} }
} }
// func Reg_Write_AD(key , value * string){
// Reg_Write_key_one(
// Reg_Root_achome, //
// Reg_Path_achome, //
// *key, // regedit ext
// *value) //
// }
func Reg_Write_DC(key , value string){ func Reg_Write_DC(key , value string){
Reg_Write_key_one( Reg_Write_key_one(
Reg_Root_dc, Reg_Root_dc,
......
No preview for this file type
...@@ -5,26 +5,31 @@ import ( ...@@ -5,26 +5,31 @@ import (
"AD-Control/public" "AD-Control/public"
) )
func userInit() string{ func userInit() string{
public.Loger = public.NewLoger(public.User_appdata+ `\users.log`)
public.Reg_Exist_item(public.HKCU,public.Reg_Path_home) public.Reg_Exist_item(public.HKCU,public.Reg_Path_home)
// 1 同步服务器文件共享到为微盘 // 微盘备份步骤
if public.Reg_Value_WeDriveDir != "" && public.Exist(public.Zhiwei_WxDrive_Full_Folder){ if public.Reg_Value_WeDriveDir != ""{
// && public.Exist(public.Dir_dept_share_full)
// 如果微盘的文件夹存在 // 如果微盘的文件夹存在
// 则,重复执行 // 则,重复执行
// 随机延迟300s,进行复制,固定延迟2h // 随机延迟300s,进行复制,固定延迟2h
go func (){ go func (){
for{ for{
public.RandDelay(300) public.RandDelay(300)
public.SendServer(public.GJexecCopyWeDrive(public.Msg_Exec_CopyWeDrive)) public.SendServer(public.GJexecCopyWeDrive(public.Msg_Exec_CopyWeDrive))
public.Delay(7200) public.Delay(7200)
} }
}() }()
}else{
wxdsInit()
} }
// 2 备份微盘文件到本地
go wxdsToLocal(false)
// 3 初始化 图标文件 // 初始化 图标文件
var icoDir =[]string {`AD-Control.ico`,`C:\windows\system32\AD-Control.ico`,`C:\Users\Public\Documents\AD-Control\AD-Control.ico`} var icoDir =[]string {`AD-Control.ico`,`C:\windows\system32\AD-Control.ico`,`C:\Users\Public\Documents\AD-Control\AD-Control.ico`}
for _,i := range icoDir{ for _,i := range icoDir{
if public.Exist(i){ if public.Exist(i){
...@@ -52,33 +57,39 @@ func main() { ...@@ -52,33 +57,39 @@ func main() {
// 程序初始化 // 程序初始化
mw,err := walk.NewMainWindow() mw,err := walk.NewMainWindow()
if err != nil { if err != nil {
public.PrintLog(err) public.PntError(err)
} }
icon, err := walk.Resources.Icon(icodir) icon, err := walk.Resources.Icon(icodir)
if err != nil { if err != nil {
public.PrintLog(err) public.PntError(err)
} }
// 后台图标应用初始化 // 后台图标应用初始化
ni, err := walk.NewNotifyIcon(mw) ni, err := walk.NewNotifyIcon(mw)
if err != nil { if err != nil {
public.PrintLog(err) public.PntError(err)
} }
defer ni.Dispose() defer ni.Dispose()
// Set the icon and a tool tip text. // Set the icon and a tool tip text.
if err := ni.SetIcon(icon); err != nil { if err := ni.SetIcon(icon); err != nil {
public.PrintLog(err) public.PntError(err)
} }
if err := ni.SetToolTip("Click for info or use the context menu to exit."); err != nil { if err := ni.SetToolTip("Click for info or use the context menu to exit."); err != nil {
public.PrintLog(err) public.PntError(err)
} }
menuInit(ni) menuInit(ni)
// 为了防止ADServer的Daemon.exem没有运行而导致
// 域计算机运行users.exe失败,
// 需要取消由users.exe向ADServer报告
// 交给组策略中adct.exe进行报告
// public.SendServerReport(public.Msg_Report_UserStart)
// The notify icon is hidden initially, so we have to make it visible. // The notify icon is hidden initially, so we have to make it visible.
if err := ni.SetVisible(true); err != nil { if err := ni.SetVisible(true); err != nil {
public.PrintLog(err) public.PntError(err)
} }
// 循环 运行窗体 // 循环 运行窗体
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment