Проверьте и получите доступ к серверу, используя Windows пакетный файл - PullRequest
0 голосов
/ 07 мая 2020

Прежде всего, я полный новичок в пакетных сценариях и работе в сети, при этом, как говорится, вот что я пытаюсь выполнить sh. Я хочу проверить, предоставил ли сервер этот командный файл, выполняющий p c для доступа к нему, если не создать к нему доступ. (много разных p c запускают этот командный файл) Это то, что я придумал сейчас в своем командном файле.

net use * \\ip\My_WebApp /Persistent:yes /user:Username Password
Exit 

Эта команда командного файла создает доступ к серверу просто отлично, но она создает новое соединение доступа каждый раз, когда этот файл запускается. Это не нужно и может вызвать sh загрузку сервера.

Как я могу проверить, предоставил ли сервер уже доступ? Только если нет, выполните указанную выше команду в пакетном файле. мой лог c как нравится ....

boolean status = check_server_accessibility()
if(!status){
   net use * \\ip\My_WebApp /Persistent:yes /user:Username Password
}
Exit 

Ценю любую помощь, Большое вам спасибо за ваше время.

1 Ответ

1 голос
/ 08 мая 2020

Вам нужно выполнить задачу только один раз, что говорит о том, что скриптовое решение не требуется, (постоянство означает это!) . Я предполагаю, что следующего может быть достаточно:

@Set "MyMap=\\ip\My_WebApp"
@%__AppDir__%wbem\WMIC.exe LogicalDisk Where "DriveType='4'" Get ProviderPath 2>NUL | %__AppDir__%findstr.exe /R /I "%MyMap:\=\\%\>" 1>NUL && GoTo :EOF
@%__AppDir__%net.exe Use * "%MyMap%" /Persistent:Yes /User:Username Password

В качестве альтернативы, если вам нужно знать, какая буква диска назначена ему в настоящее время, используйте для получения данных:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion

Call :MapChk "\\ip\My_WebApp"

GoTo :EOF

:MapChk
Set "MyMap=%~1"
Set "MyDrv="
For /F "Skip=1 Delims=:" %%G In (
    '%__AppDir__%wbem\WMIC.exe LogicalDisk Where "DriveType='4' And ProviderPath='%MyMap:\=\\%'" Get DeviceID 2^>NUL'
) Do For %%H In (%%G) Do Set "MyDrv=%%G:"
If Defined MyDrv (
    Echo %MyMap% is already mapped to drive %MyDrv%.
    %__AppDir__%timeout.exe /T 5 /NoBreak >NUL
    GoTo :EOF
)
%__AppDir__%net.exe Use * "%MyMap%" /Persistent:Yes /User:Username Password

Я сделал из этого ярлыка call, чтобы вы могли легко расширить его и для других сопоставлений, например, перед GoTo :EOF, (строка 6) , Call :MapChk "\\Server\My Share".

Примечание: Эти решения не тестировались, я не использую P C и не отображал сетевые местоположения, чтобы проверить их. Пожалуйста, дайте мне знать, если я где-то ошибся.

...