解析 LAPS / ADU&C 批处理文件中的字符串变量

解析 LAPS / ADU&C 批处理文件中的字符串变量

我正在尝试实现洛杉矶郡(本地管理员密码解决方案)在我们的网络上,我在将 LAPS 与 ADU&C 右键单击​​上下文菜单集成时遇到问题。我的目标是让我们的帮助台员工能够右键单击 ADU&C 内的计算机对象,并强制 LAPS 使用随附的 LAPS PowerShell 脚本重置本地管理员密码。我理解您不能直接从 ADU&C 上下文菜单本身运行 PS,但我应该能够创建一个批处理文件并让它运行所需的 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从字符串中删除周围的双引号%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%"

资源(必读):

相关内容