2017-11-08 19 views
0

쉘의 명령에 대해 PSEXEC을 사용하는 몇몇 서버의 디스크 상태를 가져 와서 테이블에 추가하려고합니다. 그러나 나는 쉘 결과에서 캡션 만 얻는다. 여기 PsExec를 Shell.Exec()을 사용하여 MS Access에서 실행할 때 결과를 성공적으로 가져올 수 있습니까?

내 코드입니다 :

Option Compare Database 
Option Explicit 

Const svrUname = "username" 
Const svrPass = "password" 
Const ForReading = 1 

Sub First() 
    Dim svr(2, 1) As String 

    svr(0, 0) = "" 
    svr(0, 1) = "server name" 
    svr(1, 0) = "PSEXEC \\(IPADD) -u " & svrUname & " -p " & svrPass " 
    svr(1, 1) = "" 

    Dim i As Integer 
    For i = 0 To 1 
     Call ShellRun(svr(i, 0) & "WMIC logicaldisk get size, caption, " _ 
     & "freespace", svr(i, 1)) 

    Next 

End Sub 
Public Sub ShellRun(sCmd As String, svrName As String) 
     ' Run a shell command, returning the output as a string 
     Dim oShell As Object 
     Dim oExec As Object 
     Dim oOutput As Object 
     Dim a As String 

     ' Run command 
     Set oShell = CreateObject("Wscript.Shell") 
     Set oExec = oShell.Exec(sCmd) 
     Set oOutput = oExec.StdOut 

     ' handle the results as they are written to and read from the StdOut object 
     Dim sInfo As String 
     Dim sLine As String 

     While Not oOutput.AtEndofStream 
      sLine = oOutput.Readline 
     Call EXTRACTINFO(sLine, svrName) 
     a = a & sLine 
SKIP: 
    Wend 
    MsgBox a 
    oExec.Terminate 

End Sub 

그 결과는 같다이 and the result is only like this

MS 액세스에서 실행할 때이 결과를 얻을 기대했다 것 같다 무엇 enter image description here

문제?

+0

코드가 컴파일되지 않습니다. 'svrUname'과 같은 변수가 있기 때문에 모듈에서'Option Explicit'을 놓친 것 같습니다. – Gustav

+0

옵션 뒤에 선언했습니다. 내 코드에는 Option Compare Database와 Option Explicit가 있습니다. –

+0

PSEXEC를 사용하지 않고 "WMIC logicaldisk get caption, size, freespace"를 표시하면 완전히 표시되고 acess는 전체 결과를 읽을 수 있습니다. –

답변

1

나는이 코드를 실행하면 :

Sub First() 

    Const svrUname = "username" 
    Const svrPass = "password" 
    Const ForReading = 1 

    Dim svr(2, 1) As String 

    svr(0, 0) = "" 
    svr(0, 1) = "server name" 
    svr(1, 0) = "PSEXEC \\(IPADD) -u " & svrUname & " -p " & svrPass 
    svr(1, 1) = "" 

    Dim i As Integer 
    For i = 0 To 0 
     Call ShellRun(svr(i, 0) & "WMIC logicaldisk get size, caption, " _ 
     & "freespace", svr(i, 1)) 
    Next 

End Sub 

Public Sub ShellRun(sCmd As String, svrName As String) 

    ' Run a shell command, returning the output as a string 
    Dim oShell As Object 
    Dim oExec As Object 
    Dim oOutput As Object 
    Dim a As String 

    ' Run command 
    Set oShell = CreateObject("Wscript.Shell") 
    Set oExec = oShell.Exec(sCmd) 
    Set oOutput = oExec.StdOut 

    ' handle the results as they are written to and read from the StdOut object 
    Dim sInfo As String 
    Dim sLine As String 

    While Not oOutput.AtEndofStream 
     sLine = oOutput.Readline 
     'Call EXTRACTINFO(sLine, svrName) 
     a = a & sLine 
SKIP: 
    Wend 
    MsgBox a 
    oExec.Terminate 

End Sub 

가 반환합니다 :

enter image description here

그래서 다시 한 번 확인하여 EXTRACTINFO 기능을.

명령 파일 :

C:\Folder\PsExec \\server -u user -p password WMIC logicaldisk get size, caption, freespace > C:\SomeFolder\DiskSize.txt 

그런 다음이 파일을 읽습니다.

+0

루프 설정은 i = 0에서 0, svr (0, 0) = ""입니다. svr (1, 0)에있는 PSEXEC을 사용하지 않았습니다. 결과는 원격 PC가 아닌 사용중인 PC에서 가져온 것입니다. –

+0

알 수 없습니다. Windows 10 머신에는 PSEXEC가 없습니다. – Gustav

+0

내 질문에 대한 MS 액세스 내에서 PSEXEC 사용하는 것입니다. 그리고 EXTRACTINFO 하위 함수는 위에 표시된 msgbox의 결과와 아무런 관련이 없습니다. –