2014-01-12 4 views
1

내 아래 코드는 서버 사용자 (\\10.0.1.22\C$\Logs\text.txt)읽기 텍스트 파일

에 텍스트 파일에서 단어를 찾을 수 있습니다 : SBICAD\user의 작업을 잘. 사용자에 대한

(SBICAD 서버의 도메인입니다) : ThisComputer\user 실패 ("로그온 실패 : 알 수없는 사용자 이름 또는 잘못된 암호")

Error message: Logon failure: unknown user name or bad password

참고 : 임 로컬 컴퓨터 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", _ 
    "[email protected]", _ 
    "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 

답변

1

게시 한 코드의 26 행에 설명 된 오류가 발생하지 않았기 때문에 약간의 질문이 명확하지 않습니다.

그러나 질문을 올바르게 이해한다고 가정하면 원격 컴퓨터에 대해 로컬 컴퓨터에서 로컬 사용자와 인증을 시도 할 때 ConnectServer 오류가 발생합니다. 이이 인증 할 수 없습니다, 따라서 호스트 A의 로컬 사용자가 원격 호스트 B에 알 수 없기 때문에 작동하지 않습니다

Authentication with local user on source host fails.

당신은 무엇을 인 (두 호스트에 알려진 사용자 중 하나가 필요합니다 도메인)을 제공

Authentication with domain user works.

또는 원격 호스트 B에 대한 로컬 사용자 :

Authentication with local user on destination host works.


그런데 왜 처음에 WMI 연결을 설정하려고합니까? 코드에서 아무 데나 사용하지 마십시오. 실제로 사용하려는 SMB 연결을 인증하지 않습니다. SMB 연결 (파일 공유에 대한 액세스는) in a different way 인증을 받아야합니다 :

Set objTextFile = objFSO.OpenTextFile("S:\text.txt") 

Do Until objTextFile.AtEndOfStream 
    ... 
Loop 

objTextFile.Close 

을 마친 후에는 네트워크를 제거 할 수 있습니다

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 

그런 다음이 같은 원격 위치에있는 파일을 읽을 작업 할 수 있습니다

net.RemoveNetworkDrive drive, True 

사용자 계정에는 관리 공유에 액세스 할 수있는 원격 호스트에 대한 관리 권한이 있어야합니다. C$. 로그 디렉토리에 대한 비 관리자 액세스를 허용하는 전용 공유를 만드는 것이 좋습니다.

+0

당신이 옳다고 생각했습니다! 그 일 :) 당신의 위대한 적시 도움을 많이 주셔서 감사합니다. – user3186990