windows主机名和工作组名修改程序
时间:2007-04-23 来源:linusdai
use Win32;
use Win32::Registry;
use Tk;
use Tk::Label;
use Tk::Text;
use Tk::Button;
use Tk::Widget;
use Tk::Radiobutton;
$number = '1';
$hostname = '';
$workgroup = '';
$mainW = MainWindow->new();
$mainW->title("Hostname&workgroup Modifier");
$frame = $mainW->Frame(-relief => 'groove',-borderwidth =>4)->pack();
$radio_pc =$frame->Radiobutton(-variable => \$number,-text =>"PC",-value =>"1")->pack(-side =>"left");
$radio_notebook = $frame->Radiobutton(-variable => \$number,-text=>"Notebook ",-value=>"2")->pack(-side=>"left");
$label_hostname = $frame->Label(-text => "Your name:")->pack();
$t_hostname = $frame->Entry(-textvariable => \$hostname)->pack();
$label_workgroup = $frame->Label(-text => "Workgroup name:")->pack();
$t_workgroup = $frame->Entry(-textvariable => \$workgroup)->pack();
$frame->Label(-textvariable => \$result_text)->pack();
$button = $frame->Button(-text => "Modify", -command => \&submit)->pack();
MainLoop();
sub submit{
if(length($hostname) >12||length($workgroup) >15){#可在此处对所输入名称作其它限制
$result_text = "Wrong format, Try again !";
print "Wrong format, Try again !\n";
} else{
$hostname =dg.$hostname.$number;
&change_hostname;
&change_groupName;
$result_text = "Process Success!";
print "Process Success!\n";
}
}
#思路:修改注册表“HKEY_LOCAL_MACHINE”中部分键值(通过搜索自己主机名找出来的,故此法不完全可
#靠,不过使用中还暂未发现有什么不利影响;
#估计递归整个注册表修改所有包含主机名的键值会可靠一些,但此发太耗时)
#应该有其他更好的方法的
sub change_hostname{
$HKEY_LOCAL_MACHINE->Open("SYSTEM",$hk_system) or die "Can't open registry";
$hk_system->Open("CurrentControlSet",$hk_controlSet) or die "Can't open registry";
$hk_system->Open("ControlSet001",$hk_controlSet001) or die "Can't open registry";
$hk_system->Open("ControlSet002",$hk_controlSet002) or die "Can't open registry";
$hk_controlSet->Open("Control",$hk_control) or die "Can't open registry";
$hk_controlSet->Open("Services",$hk_services) or die "Can't open registry";
$hk_controlSet001->Open("Control",$hk_001Control) or die "Can't open registry";
$hk_controlSet001->Open("Services",$hk_001Services) or die "Can't open registry";
$hk_controlSet002->Open("Control",$hk_002Control) or die "Can't open registry";
$hk_controlSet002->Open("Services",$hk_002Services) or die "Can't open registry";
$hk_control->Open("ComputerName",$hk_computerName) or die "Can't open registry";
$hk_services->Open("Tcpip",$hk_tcpip) or die "Can't open registry";
$hk_services->Open("nm",$hk_nm) or die "Can't open registry";
$hk_001Control->Open("ComputerName",$hk_001_computername) or die "Can't open registry";
$hk_002Control->Open("ComputerName",$hk_002_computername) or die "Can't open registry";
$hk_001Services->Open("Tcpip",$hk_001tcpip) or die "Can't open registry";
$hk_001Services->Open("nm",$hk_001nm) or die "Can't open registry";
$hk_002Services->Open("Tcpip",$hk_002tcpip) or die "Can't open registry";
$hk_002Services->Open("nm",$hk_002nm) or die "Can't open registry";
$hk_tcpip->Open("Parameters",$hk_parameters) or die "Can't open registry";
$hk_nm->Open("Parameters",$hk_nm_parameters) or die "Can't open registry";
$hk_001tcpip->Open("Parameters",$hk_001parameters) or die "Can't open registry";
$hk_001nm->Open("Parameters",$hk_nm_001parameters) or die "Can't open registry";
$hk_002tcpip->Open("Parameters",$hk_002parameters) or die "Can't open registry";
$hk_002nm->Open("Parameters",$hk_nm_002parameters) or die "Can't open registry";
$hk_computerName->Open("ActiveComputerName",$hk_activeComputerName) or die "Can't open registry";
$hk_computerName->Open("ComputerName",$hk_ComputerName_ComputerName) or die "Can't open registry";
$hk_001_computername->Open("ActiveComputerName",$hk_001activeComputerName) or die "Can't open registry";
$hk_001_computername->Open("ComputerName",$hk_001ComputerName) or die "Can't open registry";
$hk_002_computername->Open("ComputerName",$hk_002ComputerName) or die "Can't open registry";
@RegisterValue = (\$hk_parameters,\$hk_nm_parameters,\$hk_001parameters,\$hk_nm_001parameters,\$hk_002parameters,\$hk_nm_002parameters,\$hk_activeComputerName,\$hk_ComputerName_ComputerName,\$hk_001activeComputerName,\$hk_001ComputerName,\$hk_002ComputerName);
foreach $hk (@RegisterValue){
$status = $$hk->GetValues(\%values);
if ($status){
@keys = keys(%values);
@sorted_keys = sort(@keys);
foreach $entry (@sorted_keys){
$name = $values{$entry}[0];
if ($name eq "ComputerName"){
print $name," include hostname!\n";
$$hk->SetValueEx($name,0,REG_SZ,$hostname);
}#if
if ($name eq "Hostname"){
print $name," include hostname!\n";
$$hk->SetValueEx($name,0,REG_SZ,$hostname);
}#if
if ($name eq "NV Hostname"){
print $name," include hostname!\n";
$$hk->SetValueEx($name,0,REG_SZ,$hostname);
}#if
}#foreach $entry
}#if $status
}#foreach $hk
}
sub change_groupName{#在网上找的调用wmi修改工作组名的方法,后来发现也有修改主机名的方法,对wmi不怎么清楚啊!
my $hostname = `hostname`;
chomp $hostname;
exit(1) if (Win32::DomainName() eq $workgroup);
my $string = qq(wmic computersystem where Name="$hostname" call JoinDomainOrWorkgroup Name="$workgroup");
`$string`;
}
use Win32::Registry;
use Tk;
use Tk::Label;
use Tk::Text;
use Tk::Button;
use Tk::Widget;
use Tk::Radiobutton;
$number = '1';
$hostname = '';
$workgroup = '';
$mainW = MainWindow->new();
$mainW->title("Hostname&workgroup Modifier");
$frame = $mainW->Frame(-relief => 'groove',-borderwidth =>4)->pack();
$radio_pc =$frame->Radiobutton(-variable => \$number,-text =>"PC",-value =>"1")->pack(-side =>"left");
$radio_notebook = $frame->Radiobutton(-variable => \$number,-text=>"Notebook ",-value=>"2")->pack(-side=>"left");
$label_hostname = $frame->Label(-text => "Your name:")->pack();
$t_hostname = $frame->Entry(-textvariable => \$hostname)->pack();
$label_workgroup = $frame->Label(-text => "Workgroup name:")->pack();
$t_workgroup = $frame->Entry(-textvariable => \$workgroup)->pack();
$frame->Label(-textvariable => \$result_text)->pack();
$button = $frame->Button(-text => "Modify", -command => \&submit)->pack();
MainLoop();
sub submit{
if(length($hostname) >12||length($workgroup) >15){#可在此处对所输入名称作其它限制
$result_text = "Wrong format, Try again !";
print "Wrong format, Try again !\n";
} else{
$hostname =dg.$hostname.$number;
&change_hostname;
&change_groupName;
$result_text = "Process Success!";
print "Process Success!\n";
}
}
#思路:修改注册表“HKEY_LOCAL_MACHINE”中部分键值(通过搜索自己主机名找出来的,故此法不完全可
#靠,不过使用中还暂未发现有什么不利影响;
#估计递归整个注册表修改所有包含主机名的键值会可靠一些,但此发太耗时)
#应该有其他更好的方法的
sub change_hostname{
$HKEY_LOCAL_MACHINE->Open("SYSTEM",$hk_system) or die "Can't open registry";
$hk_system->Open("CurrentControlSet",$hk_controlSet) or die "Can't open registry";
$hk_system->Open("ControlSet001",$hk_controlSet001) or die "Can't open registry";
$hk_system->Open("ControlSet002",$hk_controlSet002) or die "Can't open registry";
$hk_controlSet->Open("Control",$hk_control) or die "Can't open registry";
$hk_controlSet->Open("Services",$hk_services) or die "Can't open registry";
$hk_controlSet001->Open("Control",$hk_001Control) or die "Can't open registry";
$hk_controlSet001->Open("Services",$hk_001Services) or die "Can't open registry";
$hk_controlSet002->Open("Control",$hk_002Control) or die "Can't open registry";
$hk_controlSet002->Open("Services",$hk_002Services) or die "Can't open registry";
$hk_control->Open("ComputerName",$hk_computerName) or die "Can't open registry";
$hk_services->Open("Tcpip",$hk_tcpip) or die "Can't open registry";
$hk_services->Open("nm",$hk_nm) or die "Can't open registry";
$hk_001Control->Open("ComputerName",$hk_001_computername) or die "Can't open registry";
$hk_002Control->Open("ComputerName",$hk_002_computername) or die "Can't open registry";
$hk_001Services->Open("Tcpip",$hk_001tcpip) or die "Can't open registry";
$hk_001Services->Open("nm",$hk_001nm) or die "Can't open registry";
$hk_002Services->Open("Tcpip",$hk_002tcpip) or die "Can't open registry";
$hk_002Services->Open("nm",$hk_002nm) or die "Can't open registry";
$hk_tcpip->Open("Parameters",$hk_parameters) or die "Can't open registry";
$hk_nm->Open("Parameters",$hk_nm_parameters) or die "Can't open registry";
$hk_001tcpip->Open("Parameters",$hk_001parameters) or die "Can't open registry";
$hk_001nm->Open("Parameters",$hk_nm_001parameters) or die "Can't open registry";
$hk_002tcpip->Open("Parameters",$hk_002parameters) or die "Can't open registry";
$hk_002nm->Open("Parameters",$hk_nm_002parameters) or die "Can't open registry";
$hk_computerName->Open("ActiveComputerName",$hk_activeComputerName) or die "Can't open registry";
$hk_computerName->Open("ComputerName",$hk_ComputerName_ComputerName) or die "Can't open registry";
$hk_001_computername->Open("ActiveComputerName",$hk_001activeComputerName) or die "Can't open registry";
$hk_001_computername->Open("ComputerName",$hk_001ComputerName) or die "Can't open registry";
$hk_002_computername->Open("ComputerName",$hk_002ComputerName) or die "Can't open registry";
@RegisterValue = (\$hk_parameters,\$hk_nm_parameters,\$hk_001parameters,\$hk_nm_001parameters,\$hk_002parameters,\$hk_nm_002parameters,\$hk_activeComputerName,\$hk_ComputerName_ComputerName,\$hk_001activeComputerName,\$hk_001ComputerName,\$hk_002ComputerName);
foreach $hk (@RegisterValue){
$status = $$hk->GetValues(\%values);
if ($status){
@keys = keys(%values);
@sorted_keys = sort(@keys);
foreach $entry (@sorted_keys){
$name = $values{$entry}[0];
if ($name eq "ComputerName"){
print $name," include hostname!\n";
$$hk->SetValueEx($name,0,REG_SZ,$hostname);
}#if
if ($name eq "Hostname"){
print $name," include hostname!\n";
$$hk->SetValueEx($name,0,REG_SZ,$hostname);
}#if
if ($name eq "NV Hostname"){
print $name," include hostname!\n";
$$hk->SetValueEx($name,0,REG_SZ,$hostname);
}#if
}#foreach $entry
}#if $status
}#foreach $hk
}
sub change_groupName{#在网上找的调用wmi修改工作组名的方法,后来发现也有修改主机名的方法,对wmi不怎么清楚啊!
my $hostname = `hostname`;
chomp $hostname;
exit(1) if (Win32::DomainName() eq $workgroup);
my $string = qq(wmic computersystem where Name="$hostname" call JoinDomainOrWorkgroup Name="$workgroup");
`$string`;
}
相关阅读 更多 +