Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows BAT文件映射到网络驱动器而不以管理员身份运行_Windows_Batch File_Drive - Fatal编程技术网

Windows BAT文件映射到网络驱动器而不以管理员身份运行

Windows BAT文件映射到网络驱动器而不以管理员身份运行,windows,batch-file,drive,Windows,Batch File,Drive,我正在尝试创建一个.bat文件,当它被单击时将映射到网络驱动器(如果它能够在登录时自动连接到网络,则会更好,否则就不要连接) 到目前为止,我得到的是: net use P: "\\server\foldername\foldername" 有没有一种方法可以让我创建它,这样用户就不必右键单击并以管理员身份运行?我希望他们只需单击.bat文件,它就可以为他们进行映射。将下面的内容保存在test.bat中,它就可以为您工作了: @echo off net use Z: \\server\Shar

我正在尝试创建一个.bat文件,当它被单击时将映射到网络驱动器(如果它能够在登录时自动连接到网络,则会更好,否则就不要连接)

到目前为止,我得到的是:

net use P: "\\server\foldername\foldername"

有没有一种方法可以让我创建它,这样用户就不必右键单击并以管理员身份运行?我希望他们只需单击.bat文件,它就可以为他们进行映射。

将下面的内容保存在
test.bat中,它就可以为您工作了:

@echo off

net use Z: \\server\SharedFolderName password /user:domain\Username /persistent:yes
/persistent:yes
标志将告诉计算机在登录时自动重新连接此共享。否则,您需要在每次引导期间再次运行脚本以映射驱动器

例如:

net use Z: \\WindowsServer123\g$ P@ssw0rd /user:Mynetdomain\Sysadmin /persistent:yes

我刚想出来!我所做的是像最初一样创建批处理文件:

net use P: "\\server\foldername\foldername"
然后我将其保存到桌面,右键单击属性并选中“以管理员身份运行”。然后,我将文件复制到C:\Users\“TheUser”\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup


其中“TheUser”是我想要添加到的所需用户。

我试图通过具有管理员权限的“net use”创建映射的网络驱动程序,但失败了,它没有显示出来。如果我通过UI添加它,它会在重新启动后消失,现在我通过powershell实现了这一点。
@echo off
net use z: /delete
cmdkey /add:servername /user:userserver /pass:userstrongpass

net use z: \\servername\userserver /savecred /persistent:yes
set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"

echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
echo sLinkFile = "%USERPROFILE%\Desktop\userserver_in_server.lnk" >> %SCRIPT%
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT%
echo oLink.TargetPath = "Z:\" >> %SCRIPT%
echo oLink.Save >> %SCRIPT%

cscript /nologo %SCRIPT%
del %SCRIPT%
因此,我认为您可以从.bat文件运行powershell脚本,脚本是

New-PSDrive-Name“p”-PSProvider“FileSystem”-Root“\\Server01\Public”

添加
-persist
最后,您将创建一个持久映射的网络驱动器

New PSDrive-Name“p”-PSProvider“FileSystem”-Root“\\Server01\Scripts”-Persist

有关更多详细信息,请参阅

此.vbs代码使用当前映射的网络驱动器创建.bat文件。 然后,只需将创建的文件放入要重新创建映射的机器中,然后双击它。它将尝试使用相同的驱动器号创建所有映射(如果使用任何驱动器号,可能会发生错误)。此方法还可以用作当前映射的备份。 将下面的代码另存为.vbs文件(例如Mappings.vbs),然后双击它。

“*********我的代码**********
设置wshShell=CreateObject(“WScript.Shell”)
“*********获取计算机名称”
strComputer=wshShell.ExpandEnvironmentString(“%COMPUTERNAME%”)
“*********获取域”
sUserDomain=createobject(“wscript.network”).UserDomain
设置Connect=GetObject(“winmgmts://”和strComputer)
设置WshNetwork=WScript.CreateObject(“WScript.Network”)
设置oDrives=WshNetwork.enumNetworkDrive
设置oPrinters=WshNetwork.EnumPrinterConnections
'**********当前路径
sCurrentPath=CreateObject(“Scripting.FileSystemObject”).GetParentFolderName(WScript.ScriptFullName)
“*********将报告消息留空
strMsg=“”
'**********设置对象
设置objWMIService=GetObject(“winmgmts:&“{impersonationLevel=impersonate}!\\”&strComputer&“\root\cimv2”)
设置objWbem=GetObject(“winmgmts:”)
Set objRegistry=GetObject(“winmgmts://”和strComputer&“/root/default:StdRegProv”)
'**********获取用户名
sUser=CreateObject(“WScript.Network”).UserName
'**********打印用户和计算机
'strMsg=strMsg&'User:&sUser&VbCrLf
'strMsg=strMsg和'Computer:&strComputer&VbCrLf&VbCrLf
strMsg=strMsg&“####复制自”&strComputer&“####”&VbCrLf&VbCrLf
strMsg=strMsg&“@echo off”和vbCrLf
对于i=0到oDrives.Count-1步骤2
strMsg=strMsg&“净使用”&oDrives.Item(i)&“&oDrives.Item(i+1)&”/user:&sUserDomain&“\”&sUser&“/persistent:yes”&VbCrLf
下一个
strMsg=strMsg&“:退出”&VbCrLf
strMsg=strMsg&“@pause”和VbCrLf
'**********将文件写入磁盘。
strDirectory=sCurrentPath
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
如果objFSO.FolderExists(strDirectory),那么
“普罗塞德
其他的
设置objFolder=objFSO.CreateFolder(strDirectory)
如果结束
'*********计算文件名的日期序列**********
intMonth=月份(现在)
如果月份<10,则
strhismonth=“0”和intMonth
其他的
strhismonth=intMOnth
如果结束
intDay=天(现在)
如果intDay<10,则
strThisDay=“0”和intDay
其他的
strhisday=intDay
如果结束
strFilenameDateSerial=年(现在)&strhismonth&strhisday
sFileName=strDirectory&“\”&strComputer&“\”&sUser&“&MappedDrives”&“\”&strFilenameDateSerial&.bat”
设置objFile=objFSO.CreateTextFile(sFileName,True)
objFile.Write strMsg和vbCrLf
'**********要求查看文件
strFinish=“End:A.bat已生成。”&VbCrLf&“将生成的文件(&sFileName&”)复制到要重新创建映射的计算机中,然后双击它。”&VbCrLf&VbCrLf
MsgBox(strFinish)

我是否需要将文件保存在用户登录文件中(如果需要,您知道该文件位于何处吗?)以及当我添加:user:domain\Username时,我是保留该文件还是将其替换为我们的domain和Username?谢谢你的帮助!你可以把这个
test.bat
文件放在任何你想要的地方,是的,你需要用你各自的域和用户名替换
domain\Username
。我在答案中添加了一个示例供您参考。这是所提供的
用户名
密码
。它表示您使用给定的
用户名登录到远程系统时使用的
密码
。好的,我用正确的信息尝试了它;但是,它不映射驱动器。唯一有效的方法是,如果我以管理员的身份运行批处理文件,那么我本来就可以使用它。我真的不喜欢将密码放在纯文本中。这对我来说是一个巨大的安全问题。没有其他更好的方法吗?计算机在一个域上吗?是的,计算机在一个应该按原样工作的域上。为什么你提到必须以管理员的身份运行它?欢迎来到Stack Overflow。请用两分钟的时间。此外,至少要打开阅读。了解更多信息。处理时,cmdkey命令是基石

' ********** My Code **********
Set wshShell = CreateObject( "WScript.Shell" )

' ********** Get ComputerName
strComputer = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )

' ********** Get Domain 
sUserDomain = createobject("wscript.network").UserDomain

Set Connect = GetObject("winmgmts://"&strComputer)
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set oDrives = WshNetwork.EnumNetworkDrives
Set oPrinters = WshNetwork.EnumPrinterConnections

' ********** Current Path
sCurrentPath = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)

' ********** Blank the report message
strMsg = ""

' ********** Set objects 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objWbem = GetObject("winmgmts:")
Set objRegistry = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv")

' ********** Get UserName
sUser = CreateObject("WScript.Network").UserName

' ********** Print user and computer
'strMsg = strMsg & "    User: " & sUser & VbCrLf
'strMsg = strMsg & "Computer: " & strComputer & VbCrLf & VbCrLf

strMsg = strMsg & "###  COPIED FROM " & strComputer & " ###" & VbCrLf& VbCrLf
strMsg = strMsg & "@echo off" & vbCrLf

For i = 0 to oDrives.Count - 1 Step 2
    strMsg = strMsg & "net use " & oDrives.Item(i) & " " & oDrives.Item(i+1) & " /user:" & sUserDomain & "\" & sUser & " /persistent:yes" & VbCrLf
Next
strMsg = strMsg & ":exit" & VbCrLf
strMsg = strMsg & "@pause" & VbCrLf

' ********** write the file to disk.
strDirectory = sCurrentPath 
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strDirectory) Then
    ' Procede
Else
    Set objFolder = objFSO.CreateFolder(strDirectory)
End if

' ********** Calculate date serial for filename **********
intMonth = month(now)
if intMonth < 10 then
    strThisMonth = "0" & intMonth
else
    strThisMonth = intMOnth
end if
intDay = Day(now)
if intDay < 10 then
    strThisDay = "0" & intDay
else
    strThisDay = intDay
end if
strFilenameDateSerial = year(now) & strThisMonth & strThisDay
    sFileName = strDirectory & "\" & strComputer & "_" & sUser & "_MappedDrives" & "_" & strFilenameDateSerial & ".bat"
    Set objFile = objFSO.CreateTextFile(sFileName,True) 
objFile.Write strMsg & vbCrLf

' ********** Ask to view file
strFinish = "End: A .bat was generated. " & VbCrLf & "Copy the generated file  (" & sFileName & ")  into the machine where you want to recreate the mappings and double-click it." & VbCrLf & VbCrLf 
MsgBox(strFinish)