vbs中关于计算机名的相关讨论
程序员文章站
2022-06-16 20:03:11
原文:http://www.opencjk.org/~scz/ 关于计算机名的相关讨论 http://www.opencjk.org/~scz/windows/...
原文: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
关于计算机名的相关讨论
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
上一篇: urllib库爬取51job
下一篇: golang高并发的深入理解