vbs中關于計算機名的相關討論
2020-07-26 12:04:11
供稿:網友
 
						原文: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名,可能是空白。此時訪問"http://<ip>/ipc$",會出錯,微軟 
給出的錯誤信息基本無用。抓包發現沒有任何IP報文出現,出錯層次很高,還沒到達 
IP層。訪問"http://<name>/ipc$"倒是能成功。flier就碰上了這種事,應該是安裝某軟件 
時直接操作注冊表修改計算機名出岔子了。 
Q: 在XP中打開磁盤管理,報"RPC服務不可用"。 
A: 
這是"Logical Disk Manager/dmserver"服務所用計算機名與ActiveComputerName處 
的NetBIOS名不匹配所致,一般都是因為后者被破壞。重啟OS后如果還不能恢復,請 
在GUI上重新設置計算機名,應該就可以了。參看: 
http://support.microsoft.com/kb/884564