Я столкнулся с проблемой, в которой мой опыт (и гугл-фу) меня подвел.
В принципе, мне нужно вытолкнуть KB968730 пару сотен клиентов или около того. Естественно, я хотел бы проверить установку исправления перед тем, как начать установку. К сожалению, мне нужно сделать это с помощью сценария и объекта групповой политики, а не с помощью такой системы, как SCCM. Обычно это не то, что вызывает у меня какие-либо проблемы, но, похоже, здесь есть загвоздка.
Загвоздка в том, что путь к разделу реестра, который устанавливает это исправление, имеет кровавое пространство. В частности, он устанавливается на HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730
.
Неудивительно, что стандартный командный файл / команда CMD reg.exe query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730
выдает синтаксическую ошибку и портит часть проверки установки моего командного файла - он видит вторую часть пути в качестве второго аргумента. Итак, конечно, я попытался заключить путь в двойные кавычки, без радости. Одиночные кавычки, никакой радости. Угроза моей операционной системе и / или Microsoft также не дала результатов.
После некоторых поисков в Google и ругательств я нашел то, что кажется решением этой проблемы, но не могу заставить его работать, по какой-то причине я не могу понять. (Несомненно, потому что в наши дни мои навыки программирования слабы, а токенизация строк в лучшем случае вызвала у меня зацикливание.)
Похоже, я хочу использовать что-то вроде:
for /f "Tokens=2,*" %%a in (‘reg.exe "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path’) do (set xpath=%%a)
а затем работать с %xpath%
, но это не работает. Установка токенов в 1 дает мне путь до пробела, установка на 2 дает мне путь после пробела, и я не могу понять, как добавить одно значение к другому. Особенно неприятно, так как все ответы, которые я видел, говорили: «Спасибо, сработало !!!» или похожие. * (С оговоркой, что вы удалите один %
при выполнении непосредственно в командной строке.)
Кто-нибудь знает, что я здесь напортачил?
С другой стороны, если кто-то все еще использует VBS и знает, как это сделать, я бы с радостью выбрал этот вариант. (Однако нет PowerShell, потому что у нашего клиента XP он не установлен.)
PS, если это лучше подходит для StackOverflow, у меня нет проблем с его переносом, но моя первоначальная мысль заключалась в том, что «мы» не ценим разработчиков, которые приходят сюда и задают [нам] тривиальные вопросы о настройке своего разработчика. машины, поэтому я подумал, что они, вероятно, будут так же относиться к моему вопросу.
Двойные кавычки подходят для путей реестра, содержащих пробелы. Я только что протестировал здесь Windows XP SP3. Следующее возвращает ожидаемые ключи / значения:
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
Если вы хотите использовать токены, вам нужно использовать delims
возможность указать не использовать пробел / табуляцию в качестве разделителя. Из FOR /?
:
delims=xxx - specifies a delimiter set. This replaces the default delimiter set of space and tab.
Пример простой партии с использованием ;
как разделитель.
FOR /F "usebackq delims=;" %%A IN (`REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path`) DO (
SET XPATH=%%A
)
Кроме того, вы можете найти wmic
полезная полезность. Он поставляется с XP и для этого использует WMI. Вы можете быстро проверить свою КБ с помощью чего-то вроде:
wmic qfe list brief | FIND /I "KB968730"