获取 PowerShell 命令输出作为 bat (cmd) 脚本中的变量

Pap*_*urf 3 powershell batch windows-command-prompt variables

我正在尝试在某些 .cmd 文件中获取主机的 FQDN。我们有脱节的 AD 域,所以"@echo %COMPUTERNAME%.%USERDNSDOMAIN%"不起作用。我的意思是它有效,但返回错误的值。

我最终得到的解决方案是 powershell.exe -noninteractive -command[System.Net.Dns]::GetHostByName(($env:computerName)).HostName

它在命令行中工作正常。我试图将它放入我的 cmd 文件中的一个变量中:

FOR /F "tokens=* USEBACKQ" %%F IN (\`powershell.exe -noninteractive -command     
[System.Net.Dns]::GetHostByName(($env:computerName)).HostName\`) DO (
    SET var=%%F
)
ECHO %var%
Run Code Online (Sandbox Code Playgroud)

但是此时出现以下错误: ).HostName`) 是意外的。

我知道应该筛选某些内容,因为 cmd 和 powershell 都在解析这一行,但不知道筛选什么以及如何筛选。如何让这个开始工作?

小智 5

你需要逃避括号内的主题使用时FOR \F

FOR /F "tokens=* USEBACKQ" %%F IN (`powershell.exe -noninteractive -command [System.Net.Dns]::GetHostByName^(^($env:computerName^)^).HostName`) DO (
    SET var=%%F
)

ECHO %var%
Run Code Online (Sandbox Code Playgroud)