Я пытаюсь внедрить LAPS (Local Admin Password Solution) в нашей сети, и у меня возникают проблемы при интеграции LAPS в контекстное меню ADU & C, вызываемое правой кнопкой мыши. Моя цель - чтобы сотрудники службы поддержки могли щелкнуть правой кнопкой мыши на объекте компьютера в ADU & C и заставить LAPS сбросить пароль локального администратора с помощью прилагаемого сценария LAPS PowerShell. Я понимаю, что вы не можете запустить PS напрямую из самого контекстного меню ADU & C, но я должен иметь возможность создать командный файл и запустить его нужный сценарий PS. Все работает правильно, но проблема в том, что когда я щелкаю правой кнопкой мыши объект компьютера в ADU & C и затем запускаю пакетный файл из контекстного меню, он передает имя компьютера в виде строки в формате LDAP. Я пытаюсь проанализировать эту строку внутри самого пакетного файла и затем передать проанализированную строку в PS, но у меня ничего не получилось.

Как правило, командный файл, который я использую (запущен из ADU & C adminContextMenu):

@echo off
Title "Reset local Administrator password"
For /F "tokens=2 delims==," %%A In ("%1%") Do Set CompName=%%%A
PowerShell.exe -ExecutionPolicy Unrestricted -Command "Import-Module AdmPwd.PS; Reset-AdmPwdPassword" -ComputerName:%CompName%
Set CompName=

Пример строки, передаваемой в пакетный файл в качестве аргумента командной строки% 1%:(кавычки также являются частью строки):

"LDAP://SERVER.contoso.com/CN=IT-SYSTEM,OU=ITusers,DC=contoso,DC=com"

Что я хочу получить из приведенной выше строки, так это само имя компьютера (IT-SYSTEM), которое будет содержать весь текст после того, как первый = (равно) зарегистрируется до первой запятой (поэтому мои разделители установлены для этого, а мой токен 2). Я хочу сохранить это в новой переменной с именем CompName, и тогда я смогу передать эту переменную команде PS в пакетном файле. Я попробовал несколько вариантов команды FOR без успеха. Я думаю, что моя проблема может заключаться в том, что исходная строка, передаваемая в пакетный файл, уже заключена в кавычки. Можно ли получить нужную информацию в указанной выше строке, используя пакетный файл, если анализируемая строка уже содержит кавычки?

заранее спасибо

1 ответ1

2

Используйте %~1 чтобы убрать окружающие двойные кавычки из строки %1 , если она есть (требуются расширения команд ). Более того, есть некоторые (ключ ошибся?) Вредные лишние % процентные знаки в вашем коде:

For /F "tokens=2 delims==," %%A In ("%1%") Do Set CompName=%%%A
                                       ^                   ^

Следующий скрипт может работать:

@echo off
SETLOCAL EnableExtensions DisableDelayedExpansion
Title "Reset local Administrator password"
For /F "tokens=2 delims==," %%A In ("%~1") Do Set "CompName=%%A"
ECHO PowerShell.exe -ExecutionPolicy Unrestricted -Command "Import-Module AdmPwd.PS; Reset-AdmPwdPassword" -ComputerName:%CompName%
Set CompName=

Обратите внимание, что строка PowerShell.exe просто ECHOed для целей отладки (так как у меня не установлен модуль AdmPwd для его отладки); сделайте его работоспособным, удалив начальное слово ECHO не раньше, чем отладку:

PowerShell.exe -ExecutionPolicy Unrestricted -Command "Import-Module AdmPwd.PS; Reset-AdmPwdPassword -ComputerName:%CompName%"

Ресурсы (требуется чтение):

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .