原文:http://www.opencjk.org/~scz/
關於電腦名稱的相關討論
http://www.opencjk.org/~scz/windows/200603151441.txt
Q: 我的電腦->屬性->電腦名稱->電腦描述,我想改動這裡,但它是灰色不可寫的。
A: 如果lanmanserver service未啟用,就會這樣。執行"net start srv"即可。
Q: 我想修改所屬工作群組,但那裡是灰色不可寫的。
A: 如果lanmanworkstation service未啟用,就會這樣。執行"net start rdr"即可。
Q: 如何在命令列上修改電腦名稱
A: backend@nsfocus
--------------------------------------------------------------------------
set obj = getobject( "winmgmts:\\.\root\cimv2" )
set list = obj.execquery( "select * from win32_computersystem" )
for each x in list
x.rename( wscript.arguments.item( 0 ) )
next
--------------------------------------------------------------------------
> cscript.exe //nologo computerrename.vbs xxx
D: scz@nsfocus
平常自然語言所說的電腦名稱非常不精確,下面精確地介紹一下與之相關的登錄機碼:
--------------------------------------------------------------------------
windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName]
"ComputerName"="CLOUDSKY"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName]
"ComputerName"="CLOUDSKY"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"Domain"=""
"Hostname"="CLOUDSKY"
"NV Domain"=""
"NV Hostname"="CLOUDSKY"
--------------------------------------------------------------------------
ActiveComputerName處的ComputerName對應當前NetBIOS名。另一處ComputerName將
在下一次重啟時被複製到ActiveComputerName處。
"<Hostname>.<Domain>"對應當前FQDN(全稱網域名稱),"<NV Hostname>.<NV Domain>"將
在下一台重啟時被複製到"<Hostname>.<Domain>"處。
顯然,我們有兩種名字,一種是NetBIOS名,一種是FQDN,它們之間沒有必然聯絡,
儘管大多數時候它們是一致的。NetBIOS名可用在很多地方,適用於TCP/IP、IPX/SPX、
NetBEUI等實現了NetBIOS介面的通訊協定。FQDN卻只用於TCP/IP協議。微軟在名字解
析問題上經曆了多次變化,名字解析順序各不相同,終端使用者很難區分NetBIOS名與
FQDN。比如"ping <name>"究竟使用哪類名字,會有多個變種,依賴作業系統、網路
拓撲,這裡不詳細討論了。總之要記住,說起電腦名稱時,有兩種名字。
在GUI上修改電腦名稱時,實際操作的是:
--------------------------------------------------------------------------
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName]
"ComputerName"="CLOUDSKY"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"NV Domain"=""
"NV Hostname"="CLOUDSKY"
--------------------------------------------------------------------------
現在應該明白為什麼在GUI上修改電腦名稱後需要要重啟才會生效了吧。
一般不建議直接操作註冊表修改這些值,可以考慮Win32 API。SetComputerName()只
能設定NetBIOS名。SetComputerNameEx()可用於設定NetBIOS名或FQDN。
還可以用WMI,就像backend所示範的那樣。這種辦法與GUI修改法完全等價,同時修
改了NetBIOS名與FQDN,重啟後生效。注意,這兩種辦法修改NetBIOS名時自動將之轉
換成大寫,而FQDN保持大小寫敏感。
用註冊表監視器觀察hostname.exe,就會發現該命令只取了FQDN中的Hostname,並不
取NetBIOS名。"nbtstat -A <target>"所涉及的則是NetBIOS名。devmgmt.msc取的是
ActiveComputerName處的NetBIOS名。
如果破壞了HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName,
在我的電腦裡查看NetBIOS名,可能是空白。此時訪問"\\<ip>\ipc$",會出錯,微軟
給出的錯誤資訊基本無用。抓包發現沒有任何IP報文出現,出錯層次很高,還沒到達
IP層。訪問"\\<name>\ipc$"倒是能成功。flier就碰上了這種事,應該是安裝某軟體
時直接操作註冊表修改電腦名稱出岔子了。
Q: 在XP中開啟磁碟管理,報"RPC服務不可用"。
A:
這是"Logical Disk Manager/dmserver"服務所用電腦名稱與ActiveComputerName處
的NetBIOS名不匹配所致,一般都是因為後者被破壞。重啟OS後如果還不能恢複,請
在GUI上重新設定電腦名稱,應該就可以了。參看:
http://support.microsoft.com/kb/884564