Назад | Перейти на главную страницу

Получить выходные данные команды PowerShell в виде переменной в сценарии bat (cmd)

Я пытаюсь получить полное доменное имя хоста в каком-то файле .cmd. Мы разделили домен 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%

Но получение следующей ошибки :) .HostName`) было неожиданным в это время.

Я понимаю, что что-то нужно проверять, поскольку и cmd, и powershell разбирают эту строку, но не знают, что и как проверять. Как заставить это работать?

Вам нужно избежать скобок внутри предмет когда используешь 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%