Как получить имя компьютера системы и вывести его в файл в VBScript - PullRequest
4 голосов
/ 04 января 2012

Я пытаюсь получить имя компьютера из реестра и записать его в файл. На данный момент мой вызов функции для получения имени компьютера из реестра не работает. Любой совет будет оценен.

Option Explicit
On Error Resume Next

Dim regComputerName, ComputerName

Set objShell = WScript.CreateObject("WScript.Shell")
Set objFileSystem = CreateObject("Scripting.FileSystemObject")

regComputerName = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName\Computername"
ComputerName = obj.shell.RegRead(regComputerName)

oWrite.WriteLine(ComputerName,C:\text)

Ответы [ 2 ]

5 голосов
/ 04 января 2012

Чтение значений реестра подвержено ошибкам и может потребовать повышенных привилегий в Windows 7. Существует другой способ получения имени компьютера, очень похожий на то, что вы делаете сейчас:

Set objNetwork = WScript.CreateObject("WScript.Network")
ComputerName = objNetwork.ComputerName
MsgBox ComputerName

Кроме того, последнийстрока в вашем скрипте: oWrite.WriteLine(ComputerName,C:\text) не будет работать по 2 причинам:

  1. C:\text должно быть в кавычках, например: "C:\text.txt"
  2. В VB толькоФункция, которая приводит значение, может быть вызвана с круглыми скобками.Позвоните WriteLine следующим образом: oWrite.WriteLine ComputerName, "C:\text.txt"

Наконец, вы уверены, что не ссылаетесь на VBScript вместо VB в своем вопросе?

2 голосов
/ 04 января 2012

Ваш код не работает из-за ошибки в этой строке:

ComputerName = obj.shell.RegRead(regComputerName)

Вместо obj.shell вы должны ссылаться на objShell. Это должно выглядеть так:

Set objShell = WScript.CreateObject("WScript.Shell")
strRegKey = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName\Computername"
strComputerName = objShell.RegRead(strRegKey)
WScript.Echo strComputerName

Однако, есть гораздо более надежные способы получения имени компьютера без обращения к реестру.

Из WSH (как предложено выше)

Set WshNetwork = WScript.CreateObject("WScript.Network")
strComputerName = WshNetwork.ComputerName
WScript.Echo "Computer Name: " & strComputerName

Из переменной среды ...

Set wshShell = WScript.CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
WScript.Echo "Computer Name: " & strComputerName

Из WMI ...

strcomputer = "."
Set objWMISvc = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMISvc.ExecQuery("Select * from Win32_ComputerSystem",, 48)
For Each objItem in colItems
    strComputerName = objItem.Name
    WScript.Echo "Computer Name: " & strComputerName
Next

Из ADSI ...

Set objSysInfo = CreateObject("WinNTSystemInfo")
strComputerName = objSysInfo.ComputerName
WScript.Echo "Computer Name: " & strComputerName

Из ADSI (работает только для членов домена) ...

Set objSysInfo = CreateObject("ADSystemInfo")
strComputerName = objSysInfo.ComputerName
WScript.Echo "Computer Name: " & strComputerName

... и последний способ только для пользователей Windows XP ...

Set objPC = CreateObject("Shell.LocalMachine")
strComputerName = objPC.MachineName
WScript.Echo "Computer Name: " & strComputerName
...