Я знаю, как настроить ведение журнала для записи в удаленное место в общем случае - просто укажите имя выходного файла, используя полный путь UNC (например, \\ HOST-PC \ directory \ logoutput.etl) при создании задания журнала. Однако проблема возникает, когда новые виртуальные машины создаются из главной виртуальной машины, на которой включено ведение журнала: каждая виртуальная машина будет записывать журналы в один и тот же файл в сети. Мне нужно найти способ, которым каждая новая виртуальная машина будет автоматически записывать в удаленный файл, уникальный для нее.
Я пробовал использовать переменную среды% ComputerName% в UNC-пути при настройке журнала с помощью logman.exe (например, \ host \ directory \% ComputerName% \ log.etl), надеясь, что каждая виртуальная машина автоматически расширит это, чтобы включить свои уникальное имя, но это не работает - вы просто получаете папку с именем "% ComputerName%" без расширения переменной. Это несмотря на то, что если вы используете, например, % SystemRoot%, это расширяется правильно (хотя, конечно, в этом случае будет создан неверный путь). Я не уверен, что вызывает расширение одних переменных, а не других.
Есть идеи получше?
Я не понимаю, как это можно сделать изначально с logman
, но как через пользовательский интерфейс, так и через COM-интерфейс, вы можете установить формат подкаталога, чтобы включить имя компьютера в качестве префикса.
Видеть MSDN для документации о том, как установить параметр программно.
Редактировать: Соответствующий флажок отображается как на сборщике наборов данных, так и на самом счетчике производительности. Счетчик производительности, кажется, неактивен. Обязательно щелкните правой кнопкой мыши элемент в разделе «Наборы сборщиков данных> Определено пользователем» в дереве MMC, чтобы настроить соответствующий параметр.
Также Powershell:
$taskName = "daily_perf_log"
$qualifiedName = "Service\{0}" -f $taskName
# retrieve the collection set
$dcss = new-object -com Pla.DataCollectorSetCollection
$dcss.GetDataCollectorSets($null, $qualifiedName)
$dcs = $dcss.Item(0)
# update
# 3 to enable, 1 to disable (http://msdn.microsoft.com/en-us/library/windows/desktop/aa371811(v=vs.85).aspx)
$dcs.SubdirectoryFormat = 3 <# Prepend computer name #>
# save
# 1 create new / 2 update / other options (http://msdn.microsoft.com/en-us/library/windows/desktop/aa371873(v=vs.85).aspx)
$dcs.Commit($qualifiedName, $null, 2 <# update only #>)