# Kod zmienia nazw komputera w jego domenie i w nim samym.
# Skrypt mona uruchomi wycznie na komputerach z systemami Windows XP i Windows Server 2003.

use Win32::OLE qw(in);
$Win32::OLE::Warn = 3;

# ------ KONFIGURACJA SKRYPTU ------
$strComputer = '<NazwaKomputera>'; # np. joe-xp
$strNewComputer = '<NowaNazwaKomputera>'; # np. joe-pc
$strDomainUser = '<NazwaUPNKontaDomenowegoUytkownika>'; # np. administrator@rallencorp.com
$strDomainPasswd = '<HasoDomenowegoUytkownika>';
$strLocalUser = '<KontoAdministratoraKomputera>'; # np. joe-xp\administrator
$strLocalPasswd = '<HasoAdministratoraKomputera>';
# ------ KONIEC KONFIGURACJI ---------
# Connect to Computer
$objWMILocator = Win32::OLE->new('WbemScripting.SWbemLocator');
$objWMILocator->Security_->{AuthenticationLevel} = 6;
$objWMIComp = $objWMILocator->ConnectServer($strComputer, 'root\\cimv2', $strLocalUser, $strLocalPasswd);
$objWMICompSys = $objWMIComp->Get('Win32_ComputerSystem.Name=\'' . $strComputer . '\'');
# Rename Computer
$intRC = $objWMICompSys->Rename($strNewComputer, $strDomainPasswd, $strDomainUser);
if ($intRC != 0) {
    print 'Zmiana nazwy zakoczya si wygenerowaniem bdu: ' . $intRC, "\n";
}
else {
    print "Nazwa komputera $strComputer zostaa pomylnie zmieniona na $strNewComputer\n";
}

print "Ponowne uruchamianie systemu...\n";
$colOS = $objWMIComp->InstancesOf('Win32_OperatingSystem');
foreach my $objOS (in $colOS) {
    $objOS->Reboot();
}
