Analisando uma variável de string em um arquivo de lote para LAPS / ADU & C

0

Estou tentando implementar LAPS (Solução de senha de administrador local) em nossa rede e estou tendo problemas para integrar o LAPS com o menu de contexto do botão direito do mouse do ADU & C. Meu objetivo é que nossa equipe de Helpdesk possa clicar com o botão direito do mouse em um objeto de computador dentro do ADU & C e forçar o LAPS a redefinir a senha do Administrador local usando um script do LAPS PowerShell fornecido com ele. Entendo que você não pode executar o PS diretamente do próprio menu de contexto do ADU & C, mas devo ser capaz de criar um arquivo de lote e executá-lo no script PS desejado. Tudo funciona corretamente, mas o problema que tenho é quando clico com o botão direito do mouse em um objeto de computador no ADU & C e, em seguida, inicio o arquivo de lote do menu de contexto, ele passa o nome do computador como uma cadeia formatada por LDAP. Eu estou tentando analisar essa cadeia dentro do arquivo de lote em si e, em seguida, passar a string analisada para PS, mas não tive sucesso fazendo isso.

Geralmente, o arquivo em lote que estou usando (iniciado a partir do 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=

Um exemplo da string passada para o arquivo em lote como o argumento da linha de comando% 1% (aspas também fazem parte da string):

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

O que eu quero sair da string acima é o nome do computador em si (IT-SYSTEM), que seria todo o texto após o primeiro = (igual) se inscrever até a primeira vírgula (assim meus delims são definidos para isso e meu token é 2). Eu quero armazenar isso em uma nova variável chamada CompName e, em seguida, eu deveria ser capaz de passar essa variável ao longo do comando PS dentro do arquivo em lotes. Eu tentei algumas variações do comando FOR sem sucesso. Eu acho que o meu problema pode ser que a string original que está sendo passada para o arquivo de lote já tenha aspas enroladas. É possível obter as informações desejadas na string acima usando um arquivo em lotes se a string que está sendo analisada já tiver aspas em volta disso?

Obrigado antecipadamente

    
por STGdb 01.04.2016 / 17:07

1 resposta

2

Use %~1 para remover aspas duplas adjacentes da string %1 , se presente (requer extensões de comando ativadas ). Além disso, existem alguns sinais de % por cento extra (chave equivocada?) Em seu código:

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

O próximo script pode funcionar:

@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=

Observe que PowerShell.exe linha é meramente ECOed para fins de depuração (já que não tenho o módulo AdmPwd instalado para depurá-lo); Torne operacional removendo a palavra ECHO antes de ser depurado:

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

Recursos (leitura obrigatória):

por 01.04.2016 / 22:36