Commit 1b8514f0 by 陶腾飞

v1.0.1:修改函数文件结构,新增部分格式化错误,修改备份方案(一)

parent 633791ee
*.bat
*.ps1
/*test
/*/*.exe
/logs
\ No newline at end of file
*.exe
*.log
test/
logs/
\ No newline at end of file
No preview for this file type
......@@ -6,33 +6,34 @@ import (
func main(){
pub.AutoGetWeDriveDir()
pub.Loger = pub.NewLoger(pub.Dir_tmp + `\adct.log`)
var backupText = flag.String(pub.Msg_Backup,"","backup status to AD")
var reportText = flag.String(pub.Msg_Report,"","report to AD")
var execText = flag.String(pub.Msg_Exec,"","exec to LocalDaemon")
var regText = flag.String(pub.Msg_Reg,"","mod reg")
var userText = flag.String("user","","who is running me")
var wolmacText = flag.String("wolmac","","input mac address for wake pc")
var woluserText = flag.String("woluser","","input name for walk pc")
var hourText = flag.Bool("hour",false,"exec task at the time")
var backupText = flag.String( pub.Msg_Backup ,"" ,"backup status to AD")
var reportText = flag.String( pub.Msg_Report ,"" ,"report to AD")
var execText = flag.String( pub.Msg_Exec ,"" ,"exec to LocalDaemon")
var regText = flag.String( pub.Msg_Reg ,"" ,"mod reg")
var userText = flag.String( "user" ,"" ,"who is running me")
var passText = flag.String( "pass" ,"" ,"input passwork,but not need")
var wolmacText = flag.String( "wolmac" ,"" ,"input mac address for wake pc")
var woluserText = flag.String( "woluser" ,"" ,"input name for walk pc")
var wolallText = flag.Bool( "wolall" ,false ,"wake all Domain Computer")
var hourText = flag.Bool( "hour" ,false ,"exec task at the time")
flag.Parse()
if *hourText {flag_hour();return}
if *reportText != "" { flag_report(reportText,userText)}
if *backupText != "" { flag_bakcup(backupText)}
if *execText != "" { flag_exec(execText)}
if *regText != "" { flag_reg(regText)}
if *wolmacText != "" { flag_wolmac(wolmacText)}
if *woluserText != "" { flag_woluser(woluserText)}
if *hourText { flag_hour( );return}
if *reportText != "" { flag_report( reportText );return}
if *backupText != "" { flag_bakcup( backupText );return}
if *execText != "" { flag_exec( execText );return}
if *regText != "" { flag_reg( regText );return}
if *wolmacText != "" { flag_wolmac( wolmacText );return}
if *woluserText != "" { flag_woluser( woluserText );return}
if *wolallText { flag_wolall( userText,passText );return}
return
}
func flag_report(s *string,user * string){
pub.SendServer(pub.GJreport(*s,*user))
func flag_report(s *string){
pub.SendServerReport(*s)
}
func flag_bakcup(s *string){
;
......@@ -45,7 +46,7 @@ func flag_reg(s * string){
}
func flag_wolmac(mac * string){
if err := pub.Wol(*mac); err != nil{
pub.PntWol(err)
pub.PntError(err)
} else {
pub.PntWol(*mac)
}
......@@ -59,7 +60,8 @@ func flag_hour(){
switch nh{
case 0:
pub.SendServerExec(pub.Msg_Report_TurnOffPC)
pub.SendServerReport(pub.Msg_Report_StartBak)
break
case 1:
pub.SendServerExec(pub.Msg_Report_TurnOffPC)
......@@ -74,6 +76,25 @@ func flag_hour(){
pub.SendServerExec(pub.Msg_Report_TurnOffPC)
break
default :
pub.SendServerExec(pub.Msg_Report_TurnOffPC)
break
}
}
func flag_wolall(user* string,pass * string){
if *user != pub.AD_User_wol {return}
pcgroup := pub.LDAP_Get_PCGroup(user,pass)
for i,pc := range pcgroup{
mac := pub.Reg_query_key_one(
pub.Reg_Root_ac,
pub.Reg_Path_home_ac+pc,
pub.Reg_Name_MACaddress)
if mac == ""{
pub.PntError(pc,"查找注册表失败")
continue
}else{
pub.PntInfo(i,pc)
pub.RandDelay(10)
flag_wolmac(&mac)
}
}
}
\ No newline at end of file
No preview for this file type
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -9,7 +9,7 @@ const DaemonListen string = ":" + DaemonPort
const ADServerDaemon string = Host_adserver + DaemonListen
var LocalDaemon string = User_computername + DaemonListen
const RandMax int = 60
const Version string = "10.0"
const Version string = "1.0.1"
// user //
......@@ -47,10 +47,9 @@ 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`
const Dir_DCSave string = `D:\DomainUserBackupV2`
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_Be = []string {Dir_DocuBase}
var Dir_tmp string = GetEnv("tmp")
// application ////
......@@ -68,6 +67,7 @@ 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 AD_User_wol string = "wol@zhiweireach.com"
const Zhiwei_Dept_HB string = "HB"
......@@ -84,7 +84,7 @@ const Zhiwei_Dept_Count = 9
// backup //
var BackupVersion string = "0603"
var BackupVersion string = "0611B"
var BackupExtFile string = ".ffs_batch"
var BackupReplaceKey =[]byte("-tengfei-")
......@@ -108,12 +108,16 @@ const Reg_Name_LogOffTime string = "LogOffTime"
const Reg_Name_BackupUserName string = "BackupUserName"
const Reg_Name_BackupOverTime string = "BackupOverTime"
const Reg_Name_WeDriveDir string = "WeDriveDir"
const Reg_Name_MACaddress string = "MACaddress"
const Reg_Name_PrimaryUser string = "PrimaryUser"
const Reg_Name_PowerStatus string = "PowerStatus"
// reg value //
var Reg_Value_WeDriveDir string = Reg_query_key_one(HKCU,Reg_Path_home,Reg_Name_WeDriveDir)
var Reg_Value_PowerStatus_ON string = "ON"
var Reg_Value_PowerStatus_OFF string = "OFF"
// other //
......
package public
import "errors"
import (
"errors"
)
var Error_NullCommand = errors.New("NULL COMMAND ")
var Error_NullRegQuery = errors.New("Null Reg Query")
\ No newline at end of file
var Error_NullRegQuery = errors.New("Null Reg Query")
var Error_Null_Folder_WeDrive = errors.New("Not Find Folder WxDrive ")
var Error_Null_App_Sync = errors.New("Not Find Application AllWay Sync")
var Error_Null_File = errors.New("Not Find File")
var Error_Fail_File_Open = errors.New("Fail File Open")
var Error_Fail_File_Write = errors.New("Fail File Write")
package public
import(
ldap "gopkg.in/ldap.v3"
)
func LDAP_Get_PCGroup(user ,pass * string) []string {
l, err := ldap.DialURL("ldap://127.0.0.1:389")
if err != nil {
PntError(err)
}
defer l.Close()
if err = l.Bind(*user, *pass);err != nil {
//if err = l.Bind("zhiweiadserver@zhiweireach.com", "if(hdc==DOMAIN20)");err != nil {
PntError(err)
}
searchRequest := ldap.NewSearchRequest(
"ou=情报部门,dc=zhiweireach,dc=com",
ldap.ScopeWholeSubtree,ldap.NeverDerefAliases, 0, 0, false,
"(cn=*-PC)",
//"(&(objectClass=organizationalPerson))",
[]string{"cn"},
nil,
)
sr, err := l.Search(searchRequest)
if err != nil {
PntError(err)
}
pcgroup := make([]string,len(sr.Entries))
for i, entry := range sr.Entries {
// 完整输出 entry.DN
// 输出特定目录 entry.GetAttributeValue("cn")
pcgroup[i] = entry.GetAttributeValue("cn")
}
return pcgroup
}
\ No newline at end of file
......@@ -58,12 +58,9 @@ func DealMsgEnter(ip string,msgtype string,unmsg []byte) []byte {
func (rep *MJreport)Msg_Deal() interface{} {
switch rep.Instruction{
case Msg_Report_Offwork:
return GJbackup()
case Msg_Report_StartBak:
return GJbackup()
return GJbackup(rep.Computername)
case Msg_Report_OverBak:
SysMsgBox(rep.Computername,`即将关机,如需取消关机,运行Z:\tools\【工具】取消关机.bat或在小工具-电源管理-取消自动关机`)
......@@ -73,11 +70,17 @@ func (rep *MJreport)Msg_Deal() interface{} {
rep.Reg_Write_Key_one_AC(
Reg_Name_TurnOffTime,
UnixTimeParse(&rep.Timestamp))
rep.Reg_Write_Key_one_AC(
Reg_Name_PowerStatus,
Reg_Value_PowerStatus_OFF)
case Msg_Report_WillTurnOnPC:
rep.Reg_Write_Key_one_AC(
Reg_Name_TurnOffTime,
UnixTimeParse(&rep.Timestamp))
rep.Reg_Write_Key_one_AC(
Reg_Name_PowerStatus,
Reg_Value_PowerStatus_ON)
case Msg_Report_WillLogInUser:
rep.Reg_Write_Key_one_AC(
......@@ -200,8 +203,8 @@ func (bak * MJbackup)Msg_Deal() interface{}{
case Msg_Backup_Status_Start:
if !PrimaryUser(bak.Username) { return nil }
bak.Username = User_name
//bak.Username = User_name
bak.Computername = User_computername
bak.Explain = "Backup Start"
bak.Status = Msg_Backup_Status_If
......@@ -215,7 +218,7 @@ func (bak * MJbackup)Msg_Deal() interface{}{
//判断是否有最新版本的文件是否存在
if NotExist(App_FreeFileSyncExe){
SendServerError("FreeFileSync hasn't been installed")
SendServerError(Error_Null_App_Sync)
return nil
}
......@@ -251,7 +254,7 @@ func (bak * MJbackup)Msg_Deal() interface{}{
if !bak.BatchFileExist{
PntReport("init ",string(bak.BatchFileName))
if err := WriteBytesFile(bak.BatchFileName,bak.BatchFileData);err !=nil{
SendServerError("Write Batch File Error "+err.Error())
SendServerErrorf("%s %v-%v",bak.BatchFileName,Error_Fail_File_Write,err.Error())
}
}
......@@ -284,26 +287,6 @@ func (reg * MJreg)Msg_Deal() interface{}{
// 关于 error 错误 的 消息处理
func (err * MJerror)Msg_Deal() interface{}{
// 为了降低在企业微信的消息频率
// 选择部分主机进行发送消息
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) }
SendWX(err.Instruction)
return nil
}
\ No newline at end of file
......@@ -38,7 +38,6 @@ const Msg_Report_TurnOnPC string = TurnOnPC
const Msg_Report_TurnOffPC string = TurnOffPC
const Msg_Report_WillTurnOnPC string = WillTurnOnPC
const Msg_Report_WillTurnOffPC string = WillTurnOffPC
const Msg_Report_Offwork string = "offwork"
const Msg_Report_OverCopyToWeDrive string = "overcopytowedrive"
const Msg_Report_OverCopyToDeptShare string = "OverCopyToDeptShare"
const Msg_Report_StartBak string = "startbak"
......@@ -107,7 +106,6 @@ type MJreport struct {
MJbase
Version string `json:"version"`
}
// Exec Json Fromat ///////////////////////////////////////////////////////
type MJexec struct {
MJbase
......@@ -122,9 +120,9 @@ type MJbackup struct{
MJbase
Version string `json:"version"`
DiskFree string `json:"diskfree"`
BatchFileExist bool `json:"batchfileexist"`
BatchFileData []byte `json:"batchfiledata"`
BatchFileName string `json:"batchfilename"`
//BatchFileExist bool `json:"batchfileexist"`
//BatchFileData []byte `json:"batchfiledata"`
//BatchFileName string `json:"batchfilename"`
}
type MJreg struct{
MJbase
......@@ -139,6 +137,8 @@ type MJerror struct{
MJbase
}
//
//
// quickly Get & Set Json
......@@ -147,28 +147,27 @@ type MJerror struct{
// Report
func GJreport(s string,who string) interface{}{
func GJreport(s string) interface{}{
var rep MJreport
rep.init(s)
if who != "" { rep.Username = who }
return rep
}
func (rep * MJreport)init(Report string) {
rep.Username = User_name
rep.Dept = User_dept
rep.Timestamp = NowTimestamp()
rep.Computername = User_computername
rep.MsgType = Msg_Report
rep.Instruction = Report
rep.Version = Version
}
func (rep * MJreport)Reg_Write_Key_one_AC(key , value string){
Reg_Write_key_one(
Reg_Root_ac,
Reg_Path_home_ac + rep.Computername,
Reg_Path_home_ac + rep.Computername,
key,
value)
}
func (rep * MJreport)init(Report string) {
rep.Computername = User_computername
rep.Timestamp = NowTimestamp()
rep.MsgType = Msg_Report
rep.Instruction = Report
rep.Version = Version
}
// Exec
......@@ -229,32 +228,33 @@ func (exec * MJexec)init(s string){
// Backup
func GJbackup()interface{}{
func GJbackup(pc string)interface{}{
var bak MJbackup
bak.init()
bak.init(pc)
return bak
}
func (bak * MJbackup)init() {
bak.Dept = User_dept
func (bak * MJbackup)init(pc string) {
//bak.Dept = User_dept
bak.Timestamp = NowTimestamp()
bak.MsgType = Msg_Backup
bak.Version = BackupVersion
bak.Status = Msg_Backup_Status_Start
bak.Username = GetPrimaryUser(pc)
}
// error
func GJerror(s string)interface{}{
func GJerror(e error)interface{}{
var err MJerror
err.init(s)
err.init(e)
return err
}
func (err * MJerror)init (s string){
func (err * MJerror)init (e error){
err.Username = User_name
err.Dept = User_dept
err.Timestamp = NowTimestamp()
err.Computername = User_computername
err.MsgType = Msg_Error
err.Instruction = s
err.Instruction = e.Error()
}
......@@ -2,10 +2,10 @@ package public
import (
"log"
"os"
"fmt"
)
var Loger * log.Logger
func PrintLog(v ...interface{}){
log.SetPrefix("Output ")
log.Println(v ...)
......@@ -52,7 +52,7 @@ func NewLoger(s string) * log.Logger{
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))
SendServerErrorf("%s %v-%v",s,Error_Fail_File_Open,err)
}
return log.New(Log_file_obj,"",log.LstdFlags)
}
\ No newline at end of file
......@@ -6,38 +6,11 @@ import (
"strings"
"net"
"bufio"
"math/rand"
"time"
"os/exec"
"io/ioutil"
"golang.org/x/text/encoding/simplifiedchinese"
)
// 获取 环境变量
// 如果空 输出错误
// 但不退出
func GetEnv(e string) string{
r:= os.Getenv(e)
PrintLog(e,"->",r)
return r
}
func GetEnvFqdn(s string)string{
cmd,err := exec.Command("whoami","/fqdn").Output()
if err !=nil {
PntError(err)
}
out,err := simplifiedchinese.GBK.NewDecoder().Bytes(cmd)
if err !=nil {
PntError(err)
}
for _,each := range strings.Split(string(out),","){
if strings.Index(each,s) != -1{
return each[3:]
}
}
return ""
}
// 获取 消息内容
func ParseJsonHead(b []byte)string{
//{"msgtype":"report","msgstate":"","username":"zhiweiadserver","computername":"ADSERVER","report":"下班"}
......@@ -65,34 +38,6 @@ func JsonToByte(v interface{}) []byte{
return textbyte
}
// 存在文件
func Exist(path string) bool {
_, err := os.Stat(path) // os.Stat获取文件信息
return !os.IsNotExist(err)
}
// 不存在文件
func NotExist(path string) bool {
_, err := os.Stat(path) //os.Stat获取文件信息
return os.IsNotExist(err)
}
// 是否为文件夹
func IsDir(path string) bool {
s, err := os.Stat(path)
if err != nil {
return false
}
return s.IsDir()
}
// 是否为文件
func IsFile(path string) bool {
return !IsDir(path)
}
func Mkdir(dir string){
os.Mkdir(dir,os.ModeSetuid)
}
func WriteBytesFile(file string ,data []byte)error{
return ioutil.WriteFile(file,data,os.ModeSetuid)
}
......@@ -121,69 +66,7 @@ func CreateExtTempate(dist*string) []byte {
func GetConnIP(s net.Addr) string {
return strings.Split(s.String(),":")[0]
}
//
func PrimaryUser(s string) bool{
if strings.Index(s,"zhiwei") == -1{
return true
}
return false
}
// 随机
func Rand(i * int)int{
rand.Seed(time.Now().UnixNano())
return rand.Intn(*i)
}
func Delay(i int){
PntInfo("Delay ",i)
time.Sleep(time.Duration(i) * time.Second)
}
func RandDelay(i int){
ri := Rand(&i)
PntInfo("RandDelay ",ri)
time.Sleep(time.Duration(ri) * time.Second)
}
func AdminUser( )bool{
switch User_name{
case AD_User_taotengfei:
return true
case AD_User_tengfei:
return true
case AD_User_main_admin:
return true
}
return false
}
func TheUser(s string)bool{
if s == User_name || AdminUser() { return true}
return false
}
func ReadDir(s string) ([]os.FileInfo,error){
f,err := ioutil.ReadDir(s)
return f,err
}
func GetNewestDir(rdir ,extdir string) string {
f,err := ioutil.ReadDir(rdir)
if err !=nil{
PntError(err)
}
//var filearge := []byte
firstModTime := f[0].ModTime()
firstName := f[0].Name()
for _,i := range f{
fileModTime := i.ModTime()
filename := i.Name()
if i.IsDir() && i.Name() != extdir{
if firstModTime.Before(fileModTime){
firstModTime = fileModTime
firstName = filename
}
}
}
return firstName
}
func HasSuffix(str * string,sub string)bool{
return strings.HasSuffix(*str,sub)
}
......@@ -193,14 +76,7 @@ func TrimSuffix(str ,s string)string{
func Exit(){
os.Exit(0)
}
func DomainComputer() bool{
if Host_adserver != User_computername {return true}
return false
}
func Adserver() bool{
if Host_adserver == User_computername {return true}
return false
}
func HostnameToUsername(hostname * string)string {
if strings.HasSuffix(*hostname,"-PC$") {
return Reg_query_key_one(
......@@ -209,4 +85,18 @@ func HostnameToUsername(hostname * string)string {
Reg_Name_LoginTime)
}
return *hostname
}
func AutoGetWeDriveDir()string{
for _,i := range Dir_WeDrive{
i += `\`
PrintLog("开始读取",i)
n := GetNewFolder(i,"Global")
f := i + n + `\WeDrive\知微数据`
if Exist(f){
PrintLog(f)
return f
}
}
SendServerError(Error_Null_Folder_WeDrive)
return ""
}
\ No newline at end of file
......@@ -7,6 +7,7 @@ import (
"io"
"bytes"
"bufio"
"fmt"
)
func SendDaemon(v interface{})[]byte{
......@@ -17,7 +18,7 @@ func SendDaemonExec(s string){
SendDaemon(GJexecUserCmd(s))
}
func SendServerReport(s string)[]byte{
return SendServer(GJreport(s,""))
return SendServer(GJreport(s))
}
func SendServerExec(s string)[]byte{
return SendServer(GJexec(s))
......@@ -25,8 +26,11 @@ func SendServerExec(s string)[]byte{
func SendServerGUIExec(s string){
SendServer(GJexecGUI(s))
}
func SendServerError(s string)[]byte{
return SendServer(GJerror(s))
func SendServerError(err error)[]byte{
return SendServer(GJerror(err))
}
func SendServerErrorf(f string, a ...interface{}) []byte {
return SendServer(GJerror(fmt.Errorf(f,a ...)))
}
// send to server
......
......@@ -2,16 +2,51 @@ package public
import (
"time"
"math/rand"
)
//
//
// time func
//
// 获取当前时间戳
func NowTimestamp() int64 {
return time.Now().Unix()
}
// 将时间戳解析成字符串
func UnixTimeParse(t *int64) string {
return time.Unix(*t,0).String()
}
// 获取 字符串格式化 时间
func GetStrTime() string{
return time.Now().String()
}
// 输出当前小时
func GetHour() int{
return time.Now().Hour()
}
\ No newline at end of file
}
//
//
// other func
//
// 输出 随机数
func Rand(i * int)int{
rand.Seed(time.Now().UnixNano())
return rand.Intn(*i)
}
// 程序挂起 i 秒
func Delay(i int){
PntInfo("Delay ",i)
time.Sleep(time.Duration(i) * time.Second)
}
// 随机挂起 x 秒
func RandDelay(i int){
ri := Rand(&i)
PntInfo("RandDelay ",ri)
time.Sleep(time.Duration(ri) * time.Second)
}
package public
//
//
// If User
//
func GetPrimaryUser(pc string) string {
name := Reg_query_key_one(
Reg_Root_ac,
Reg_Path_home_ac + pc,
Reg_Name_PrimaryUser)
PntInfo(pc,name)
return name
}
func IsPrimaryUser(s string) bool{
if strings.Index(s,"zhiwei") == -1{
return true
}
return false
}
func AdminUser( user * string )bool{
switch *user{
case AD_User_taotengfei:
return true
case AD_User_tengfei:
return true
case AD_User_main_admin:
return true
}
return false
}
func TheUser(s string)bool{
if s == User_name || AdminUser(&s) { return true}
return false
}
//
//
// If computer
//
func DomainComputer() bool{
if Host_adserver != User_computername {return true}
return false
}
func Adserver() bool{
if Host_adserver == User_computername {return true}
return false
}
\ No newline at end of file
package public
import(
"os/exec"
"os"
"os/exec"
"github.com/lxn/walk"
"strings"
registry "github.com/golang/sys/windows/registry"
"golang.org/x/text/encoding/simplifiedchinese"
)
//
//
// Get Env
//
// 获取环境变量
func GetEnv(e string) string{
return os.Getenv(e)
}
// 获取fqdn
func GetEnvFqdn(s string)string{
cmd,err := exec.Command("whoami","/fqdn").Output()
if err !=nil {
PntError(err)
}
out,err := simplifiedchinese.GBK.NewDecoder().Bytes(cmd)
if err !=nil {
PntError(err)
}
for _,each := range strings.Split(string(out),","){
if strings.Index(each,s) != -1{
return each[3:]
}
}
return ""
}
//
//
// local exec
//
func execcmd_base(cmdargs string) (string,[]string,error){
if cmdargs == "" {
return "",nil,Error_NullCommand
......@@ -42,7 +72,7 @@ func Execcmd_nowait(cmdargs string){
PntError(err)
}
}
func Execcmd_wait(cmdargs string){
func Execcmd_wait(cmdargs string,){
app,appargs,err :=execcmd_base(cmdargs)
if err !=nil{
PntError(err)
......@@ -76,6 +106,7 @@ func Execcmd_output(cmdargs string)[]byte{
//
// local
//
func ChooseFolder(explain, initDir * string) string {
fg := new(walk.FileDialog)
fg.Title = *explain
......@@ -92,14 +123,18 @@ func OpenWindow(s string){
//
// remote exec
//
// 以管理员,立刻返回
func PsExec_sd(pc ,cmd string) {
psExecCommand := `psexec \\` + pc + " -s -d "+cmd
Execcmd_nowait(psExecCommand)
}
// 以管理员,立刻返回,指定会话,执行远程程序
func PsExec_sdi(pc ,cmd ,sessionid string) {
psExecCommand := `psexec \\` + pc + " -s -d -i "+sessionid +" "+cmd
Execcmd_nowait(psExecCommand)
}
// 以管理员,立刻返回,指定会话,发送本地程序要远程主机,再执行
func PsExec_sdic(pc ,cmd ,sessionid string) {
psExecCommand := `psexec \\` + pc + " -s -d -i "+sessionid + " -c "+cmd
Execcmd_nowait(psExecCommand)
......@@ -135,6 +170,7 @@ func SysMsgBox(pc,message string){
//
// regedit base
//
func reg_prase(root * int) registry.Key{
switch *root{
case HKCU:
......@@ -186,6 +222,7 @@ func Reg_Write_key_one(root int, path, name, value string) {
//
// reg func for domain computer
//
func Reg_Write_DC(key , value string){
Reg_Write_key_one(
Reg_Root_dc,
......@@ -199,3 +236,84 @@ func Reg_Query_DC(key string) string {
Reg_Path_home,
key)
}
//
//
// reg func for AD
//
func Reg_Query_AC_DC(pc ,key string)string {
return Reg_query_key_one(
Reg_Root_ac,
Reg_Path_home_ac + pc,
key)
}
//
//
// File operate
//
// 存在文件
func Exist(path string) bool {
_, err := os.Stat(path) // os.Stat获取文件信息
return !os.IsNotExist(err)
}
// 不存在文件
func NotExist(path string) bool {
_, err := os.Stat(path) //os.Stat获取文件信息
return os.IsNotExist(err)
}
// 是否为文件夹
func IsDir(path string) bool {
s, err := os.Stat(path)
if err != nil {
return false
}
return s.IsDir()
}
// 是否为文件
func IsFile(path string) bool {
return !IsDir(path)
}
//
//
// Folder operate
//
// 创建文件夹
func Mkdir(dir string){
os.Mkdir(dir,os.ModeSetuid)
}
// 读取文件夹目录
func ReadDir(s string) ([]os.FileInfo,error){
f,err := ioutil.ReadDir(s)
return f,err
}
// 获取最新修改的文件夹
func GetNewFolder(rdir ,extdir string) string {
f,err := ioutil.ReadDir(rdir)
if err !=nil{
PntError(err)
}
firstModTime := f[0].ModTime()
firstName := f[0].Name()
for _,i := range f{
fileModTime := i.ModTime()
filename := i.Name()
if i.IsDir() && i.Name() != extdir{
if firstModTime.Before(fileModTime){
firstModTime = fileModTime
firstName = filename
}
}
}
return firstName
}
\ No newline at end of file
......@@ -14,7 +14,7 @@ import (
// 电源菜单
func menuInitPower(ni * walk.NotifyIcon){
fa := "电源选项"
sub := [...]string{"下班咯","关闭系统","用户注销","重启系统","取消关机计时"}
sub := [...]string{"关闭系统","用户注销","重启系统","取消关机计时"}
// 建立空菜单
nm,err := walk.NewMenu()
......@@ -32,14 +32,12 @@ func menuInitPower(ni * walk.NotifyIcon){
// 为子按钮 添加事件
switch i{
case 0:
na.Triggered().Attach(pWorkOff)
case 1:
na.Triggered().Attach(pCloseWindows)
case 2:
case 1:
na.Triggered().Attach(pLogOffUser)
case 3:
case 2:
na.Triggered().Attach(pRebootWindows)
case 4:
case 3:
na.Triggered().Attach(pCancelCloseWindows)
}
......@@ -58,11 +56,6 @@ func menuInitPower(ni * walk.NotifyIcon){
sysmenu.SetVisible(true)
sysmenu.SetEnabled(true)
}
// 电源管理 下班
func pWorkOff(){
pub.SendServerReport(pub.Msg_Report_Offwork)
}
// 电源管理 关机
func pCloseWindows(){
pub.SendServerExec(pub.Msg_Exec_TurnOffPC)
......@@ -269,7 +262,7 @@ func wxdsExplain(){
func menuInitTools(ni * walk.NotifyIcon){
fa := "工具集合"
sub := [...]string{"Excel关键词分割","备份用户文件","隐藏桌面图标","显示桌面图标","移动硬盘(胡一波)","键盘驱动(徐文强)","测试"}
sub := [...]string{"Excel关键词分割","备份用户文件","隐藏桌面图标","显示桌面图标","更新手机代理程序","移动硬盘(胡一波)","键盘驱动(徐文强)","测试"}
// 建立空菜单
nm,err := walk.NewMenu()
if err != nil {
......@@ -286,7 +279,7 @@ func menuInitTools(ni * walk.NotifyIcon){
if ! pub.TheUser(pub.AD_User_xuwenqiang) {continue}
case lastone:
if ! pub.AdminUser() {continue}
if ! pub.AdminUser(&pub.User_name) {continue}
}
// 建立 子按钮
......@@ -305,8 +298,8 @@ func menuInitTools(ni * walk.NotifyIcon){
na.Triggered().Attach(tHideIcon)
case 3:
na.Triggered().Attach(tShowIcon)
case 4:
na.Triggered().Attach(tUpdateATool)
case lastone-2:
na.Triggered().Attach(t_movedisk_huyibo)
case lastone-1:
......@@ -336,10 +329,17 @@ func menuInitTools(ni * walk.NotifyIcon){
func tMultiSplit(){
pub.Execcmd_nowait(pub.Cmd_K_Start + pub.App_MultiSplit)
}
// 其他工具 备份用户文件
func tBakcupUser(){
if pub.Msg_YesNo("是否执行一次手动备份用户文件夹。目标文件夹:"+pub.User_profile)==1{
pub.SendServer(pub.GJreport(pub.Msg_Report_StartBak,pub.User_name))
pub.SendServerReport(pub.Msg_Report_StartBak)
}
}
// 其他工具 更新手机代理程序
func tUpdateATool(){
pub.Execcmd_wait(`xcopy \\adserver\software\phoneproxy\ATools\win-unpacked C:\Application\win-unpacked /D /S /E /C /y`)
pub.Msg("更新完成")
}
// 其他工具 移动硬盘(胡一波专用)
......
No preview for this file type
......@@ -32,7 +32,7 @@ func userInit() string{
return i
}
}
pub.SendServerError("no icon file")
pub.SendServerErrorf("icon %v",pub.Error_Null_File)
return ""
}
......
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