问题背景:
最近有大领导的硬盘坏了导致数据丢失,当然拿到外面去恢复,但没有全部恢复。所以这个incident就触发了一个问题, 如何避免发生类似的事情。所以我就想,能否尽可能早的检测出用户的硬盘的问题,在彻底坏之前就备份好数据并更换掉硬盘。
总体的思路:
我们知道如硬盘有问题了,比如坏道啊什么的,Windows系统会产生相应的一条日志。所以如果我们能够集中监测到用户的这类日志,就可以尽可能的避免数据丢失的事故发生。我们知道WINDOWS系统有一个event转发的功能,所以只要将所有用户的相应的日志转发到一台服务器上我们就可以实现集中监测了。同时我们知道:日志转发有两种方式:collector initiated和source initiated. Source initiated 我们可以用GPO,但我们的GPO都要鬼佬来approve,如这样天知道什么时候能approve,甚至都不会approve.所以我就选择collector initiated。但这样就产生一个问题,如何在每台机器上启用日志转发,另外这种方法的日志转发需要将服务器添加到在每台用户的本机管理员组内。
下面是源代码(需要NTSET Collection控件):
unit EventForwarding;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,ComObj,ComCtrls,
IdIcmpClient,StdCtrls, NTCommon, UserMan;
type
TForm1 = class(TForm)
Button1: TButton;
IdIcmpClient1: TIdIcmpClient;
Edit1: TEdit;
NTUserMan1: TNTUserMan;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Function PingResult(HostName:String):String;
Function RunDosCommand(Command: string): string;
Function GetTime(currenttime:TdateTime):String;
Function WaitExeFinish(const sExeName: string):boolean;
procedure Button1Click(Sender: TObject);
Procedure OpenExcel(Path:string;sheetnumber:Integer);
Function AddUserAccount(HostName,logonusername,logonpwd:string):string;
Function AddComputerAccount(HostName,logonusername,logonpwd:string):string;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1; ExcelApp:Variant;
implementation
{$R *.dfm}
Function Tform1.AddUserAccount(Ho