Проблемы переименования ПК с WMIC в пакетном скрипте - PullRequest
0 голосов
/ 28 июня 2018

Я использую оператор IF, чтобы проверить, может ли компьютер присоединиться к домену, прежде чем пытаться изменить имя компьютера. У меня есть 2 блока кода.

В этом блоке никогда не возникает проблем на Windows 7 или новее. Но не предлагает никаких проверок перед переименованием.

    @echo off
    set /P "UserInput=Enter New Computer Name: "
    wmic computersystem where name="%computername%" call Rename name="%UserInput%"
    pause

Но этот блок кода всегда завершается с ошибкой

    @echo off
    IF \\%computername%==%logonserver% (
        echo \\%computername% == %logonserver%
        set /P "UserInput=Enter New Computer Name: "
        pause
        wmic computersystem where name="%computername%" call Rename name="%UserInput%"
        pause
    ) ELSE (
        echo This computer may be DomainJoined contact your System Administrator
        pause
    )

Эхо после сравнения в IF было строго, чтобы я мог проверить вывод. Он был предназначен для отладки и добавлен для ясности. Это действительный код, в котором ничего не пропущено.

Ошибка

ОШИБКА:

Описание = Неверный метод Параметр (ы)

Если я заставлю сравнение потерпеть неудачу. Оператор ELSE выполняется. Я не верю, что ошибка в IF/ELSE

1 Ответ

0 голосов
/ 28 июня 2018

Чтобы устранить необходимость в задержке расширения переменной, , которая является вашей проблемой , вы можете устранить необходимость включать эту часть кода в блок If:

@Echo Off
If /I Not "\\%COMPUTERNAME%"=="%logonserver%" (
    Echo This computer may be DomainJoined; contact your System Administrator
    Pause
    Exit /B
)
Set /P "UserInput=Enter a new name for this computer: "
Pause
WMIC ComputerSystem Where "Not Name='%UserInput%'" Call Rename "Name='%UserInput%'"
Pause

Можно также полностью удалить блок If, включив дополнительный фильтр Where:

@Echo Off
Set /P "UserInput=Enter a new name for this computer: "
Pause
WMIC ComputerSystem Where "Not Name='%UserInput%' And Not Name='%logonserver:~2%'" Call Rename "Name='%UserInput%'"
Pause

Конечный пользователь может свободно вводить все, что пожелает; Я настоятельно рекомендую вам выполнить некоторую проверку этих входных данных, прежде чем рассматривать переименование системы. Скорее всего, в отношении разрешенных соглашений об именах, запрещенных символов и даже грубых или оскорбительных строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...