我的下面代码是在服务器(\\10.0.1.22\C$\Logs\text.txt
)
对于用户:SBICAD\user
其工作正常。 (SBICAD是服务器中的域名)
对于用户:ThisComputer\user
它失败(“登录失败:未知用户名或密码错误”)
注意:我在本地机器XP上运行脚本。 Server 2003和Local Machine XP位于同一网络中。
dim objService
Set objShell = CreateObject("WScript.Shell")
strComputer = "10.0.1.22"
strDomain = "SBICAD"
Const WbemAuthenticationLevelPktPrivacy = 6
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2:Win32_LogicalDisk='c:'", _
"administrator", _
"jan@2014", _
"MS_409", _
"ntlmdomain:" + strDomain)
objSWbemServices.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFilePath = "\\" & strComputer & "\C$\Logs\text.txt"
Set objTextFile = objFSO.OpenTextFile(strFilePath , ForReading)
Do Until objTextFile.AtEndOfStream
CurrentLine= objTextFile.ReadLine
if ((InStr(1, CurrentLine, "James", 1) > 0) And (InStr(1, CurrentLine, "John", 1) > 0) )Then
Wscript.Echo "James and John Found"
end if
Loop
objTextFile.Close
答案 0 :(得分:1)
您的问题有点不清楚,因为您发布的代码第26行无法引发您所描述的错误。
但是,假设我正确理解了您的问题,问题是当您尝试使用本地计算机上的本地用户对远程服务器进行身份验证时,ConnectServer
会引发错误。这不起作用,因为主机A上的本地用户在远程主机B上是未知的,因此无法在那里进行身份验证:
您需要两个主机上都知道的用户(域名提供者):
或远程主机B上的本地用户:
说到这一点,你为什么要首先建立一个WMI连接?您永远不会在代码中的任何位置使用它,也不会验证您实际尝试使用的SMB连接。 SMB连接(访问文件共享)必须通过身份验证in a different way:
Set net = CreateObject("WScript.Network")
username = "user" 'domain user or user on the remote host!
password = "pass"
drive = "S:"
remotePath = "\\" & strComputer & "\C$\Logs"
net.MapNetworkDrive drive, remotePath, False, username, password
然后你可以在远程位置上读取文件,如下所示:
Set objTextFile = objFSO.OpenTextFile("S:\text.txt")
Do Until objTextFile.AtEndOfStream
...
Loop
objTextFile.Close
完成后,您可以删除网络驱动器,如下所示:
net.RemoveNetworkDrive drive, True
请注意,用户帐户必须具有远程主机的管理权限才能访问管理共享C$
。创建一个允许非管理员访问日志目录的专用共享可能是个好主意。