Что такое «strComputer»?

#vbscript

#vbscript

Вопрос:

Недавно мне пришлось немного поработать с VBScript, и многие сценарии, которые я видел, используют эту переменную strComputer , которая, во всяком случае, на первый взгляд кажется бессмысленной. Обычно он устанавливается "." равным , а затем используется в конкатенации строк следующим образом:

 strComputer = "."
Set objWMIService = GetObject("winmgmts:\" amp; strComputer amp; "rootcimv2")
 

Зачем это делается, когда можно просто написать Set objWMIService = GetObject("winmgmts:\.rootcimv2") ? Я вижу это повсюду, и это меня озадачивает.

Комментарии:

1. Ну, вы могли бы указать на другой компьютер; это просто делает конфигурируемость более очевидной.

2. Кто-то в MS использовал это в примере кода, и все скопировали. Это может быть любое имя компьютера. Если . это означает локальный компьютер. Например: из документов WMI strComputer = "." Set objWMIService = GetObject("winmgmts:" _ amp; "{impersonationLevel=impersonate}!\" _ amp; strComputer amp; "rootcimv2")

Ответ №1:

Как указано @false в комментариях к вопросу, цель состоит в том, чтобы настроить компьютер, к службе WMI которого вы хотите получить доступ.

. это ярлык для локального компьютера. Если вы уверены, что ваш скрипт будет подключаться только к локальному компьютеру, действительно, нет никакой пользы от настраиваемого имени компьютера, и вам лучше просто объединить . его с псевдонимом:

 Set objWMIService = GetObject("winmgmts:\.rootcimv2")
 

Однако, если вам нужна возможность запуска скрипта на удаленных хостах, вы можете, например, настроить хост с помощью аргумента командной строки:

 strComputer = "."   'default to localhost

If WScript.Arguments.Exists("ComputerName") Then
  strComputer = WScript.Arguments.Named("ComputerName")
End If

Set objWMIService = GetObject("winmgmts:\" amp; strComputer amp; "rootcimv2")

'do stuff with objWMIService
 

или считайте список имен хостов из файла:

 Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:computerlist.txt")

Do Until f.AtEndOfStream
  strComputer = f.ReadLine
  Set objWMIService = GetObject("winmgmts:\" amp; strComputer amp; "rootcimv2")

  'do stuff with objWMIService
Loop

f.Close