#vbscript
#vbscript
Вопрос:
Недавно мне пришлось немного поработать с VBScript, и многие сценарии, которые я видел, используют эту переменную strComputer
, которая, во всяком случае, на первый взгляд кажется бессмысленной. Обычно он устанавливается "."
равным , а затем используется в конкатенации строк следующим образом:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\" amp; strComputer amp; "rootcimv2")
Зачем это делается, когда можно просто написать Set objWMIService = GetObject("winmgmts:\.rootcimv2")
? Я вижу это повсюду, и это меня озадачивает.
Комментарии:
1. Ну, вы могли бы указать на другой компьютер; это просто делает конфигурируемость более очевидной.
2. Кто-то в MS использовал это в примере кода, и все скопировали. Это может быть любое имя компьютера. Если
.
это означает локальный компьютер. Например: из документов WMIstrComputer = "." 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