Personal tools
You are here: Home コンピュータ Windows Tips Windows Scripting Hosts コンピュータ名の変更
Document Actions

コンピュータ名の変更

by すぎお last modified 2008-08-31 11:32

MACアドレスとコンピュータ名の対照表を参照して、コンピュータ名を変更する。 対照表はカンマ区切りとし、物理アドレス,コンピューター名のフォーマットで記述する。 パス1はネットワークドライブ上に設定し、パス2はローカルファイルシステム上に作成する(ネットワーク接続ができなかった時に備える)。

Option Explicit
'------------------------------------------------------------------------------
' MACAddressを取得
'------------------------------------------------------------------------------
Function GetMacAddr()
    Dim objQfeSet
    Dim objQfe
    Dim objLocator
    Dim objService
    Dim strMAC
   
    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer
    Set objQfeSet = objService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration")
   
    For Each objQfe In objQfeSet
        If objQfe.IPEnabled = True Then
            strMAC = objQfe.MACAddress
        End If
    Next

    Set objQfeSet = Nothing
    Set objQfe = Nothing
    Set objService = Nothing
    Set objLocator = Nothing

    GetMacAddr = strMAC
End Function

'------------------------------------------------------------------------------
' 名前変更
'------------------------------------------------------------------------------
Sub ResetName(strNewName)
Dim objWMIService
Dim colComputers
Dim objComputer

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colComputers
objComputer.Rename(strNewName)
Next
End Sub

'------------------------------------------------------------------------------
' シャットダウン・リブート
'------------------------------------------------------------------------------
Sub Reboot(intFlag)
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")

for each OpSys in OpSysSet
if intFlag = 1 Then
OpSys.Reboot()
Else
OpSys.Shutdown()
End If
next
End Sub

'------------------------------------------------------------------------------
' 起動時実行に設定
'------------------------------------------------------------------------------
Sub SetRunOnce(strPath)
Dim WshShell, bKey
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce\exec", strPath, "REG_SZ"
End Sub

'------------------------------------------------------------------------------
' ドメイン参加
'------------------------------------------------------------------------------
Function JoinDomain(strDomain, strUser, strPassword)
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = _
GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" _
& strComputer & "'")
JoinDomain = objComputer.JoinDomainOrWorkGroup(strDomain, _
strPassword, _
strDomain & "\" & strUser, _
NULL, _
JOIN_DOMAIN + ACCT_CREATE)
End Function

'------------------------------------------------------------------------------
' MACアドレスと名前の対照表から新しい名前を返す
'------------------------------------------------------------------------------
Function GetNewName(strMac, strPath1, strPath2)
Dim objFS
Dim objFile
Dim aryStrings

Set objFS = CreateObject("Scripting.FileSystemObject")

If objFS.FileExists(strPath2) And objFS.FileExists(strPath1) Then
MsgBox "設定ファイルが存在しません。手動で設定してください。"
WScript.Quit
End If

strMac = Replace(strMac, "-", ":")

If Not objFS.FileExists(strPath1) Then
strPath1 = strPath2
End If
Set objFile = objFS.OpenTextFile(strPath1)
Do Until objFile.AtEndOfStream
aryStrings = Split(Trim(objFile.ReadLine), ",")
aryStrings(0) = Replace(aryStrings(0), "-", ":")
If (UBound(aryStrings) - LBound(aryStrings)) + 1 = 2 Then
If Len(Trim(aryStrings(0))) = Len(Trim(strMac)) Then
If UCase(Trim(aryStrings(0))) = UCase(Trim(strMac)) Then
GetNewName = UCase(Trim(aryStrings(1)))
Exit Function
End If
End If
End If
Loop
GetNewName = "00000000"
End Function

'------------------------------------------------------------------------------
'
'    メインルーチン
'
'------------------------------------------------------------------------------
Dim strNew
Dim objArg
Dim i
Dim strPath1, strPath2

Set objArg = WScript.Arguments
MsgBox objArg.Count
If objArg.Count = 1 Then
    strPath1 = objArg(0)
End If

strNew = GetNewName(GetMacAddr(), strPath1, "ローカルファイルへのパス")
If "00000000" <> strNew Then
    ResetName(strNew)
Else
    MsgBox "設定情報が存在しません。手動で設定してください。"
End If

コンピュータ名の変更で、最も簡単なのは、

C:\> wmic ComputerSystem WHERE "name='%computername%'" Call Rename "新しいコンピュータ名"

« January 2009 »
Su Mo Tu We Th Fr Sa
123
45678910
11121314151617
18192021222324
25262728293031
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: