使用Windows批处理文件检查并获得服务器访问权限。

问题描述 投票:0回答:1

首先,我对批处理脚本和网络完全是个菜鸟,说到这里,这里是我想完成的任务.我想检查服务器是否提供了这个批处理文件执行pc来访问它,如果没有创建访问它。(许多不同的pc运行这个批处理文件)这就是我现在想出的批处理文件。

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

这个批处理文件命令创建对服务器的访问就好了,但它每次执行这个文件时都会创建一个新的访问连接。这是不需要的,而且可能会使服务器负载崩溃。

我如何检查服务器是否已经提供了访问权限,只有当没有提供访问权限时,在批处理文件中执行上述命令。

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

Appreciate any help, Thank you so much for your time.

windows batch-file networking
1个回答
1
投票

你应该只需要执行一次任务,这说明不需要脚本解决方案。(持久的意思是说!). 我认为下面的内容可能就足够了。

@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".

注意事项 这些解决方案未经测试,我没有使用电脑,也没有映射的网络位置来测试它们。如果我有什么地方做错了,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.