2012-01-16 6 views
3

간단히 말해서 내 응용 프로그램은 대상에 대한 UNC 연결이 불가능한 원격 대상으로 파일을 복사해야합니다. 그러나 UNC 연결 대상에서 및 BACK 서버에서 항상 가능합니다. 그래서 계획은 WMI를 사용하여 원격 명령 셸 (cmd)을 시작하고 copy 명령을 사용하여 파일을 가져 오는 것입니다. 그러나 이것은 효과가 없습니다. 타겟의 명령 줄에서 수동으로 실행될 때 다음 명령은 잘 작동 :파일을 복사하는 WMI 원격 프로세스

copy \\192.168.100.12\c$\remotefile.txt c:\localfile.txt 

하지만이 InputParameters("CommandLine")의 일환으로이 같은 명령을 할 때 작동하지 않습니다, 어떤 오류가 발생하지 않습니다.

Dim ConnectionOptions As New System.Management.ConnectionOptions 
    With ConnectionOptions 
     .Username = "target\Administrator" 
     .Password = "password" 
    End With 

    Dim ManagementScope As New System.Management.ManagementScope("\\192.168.100.11\root\cimv2", ConnectionOptions) 
    Try 
     ManagementScope.Connect() 
     MsgBox("connected") 
     Dim ManagementPath As New System.Management.ManagementPath("Win32_Process") 
     Dim ManagementOptions As New System.Management.ObjectGetOptions 
     Dim ManagementClass As New System.Management.ManagementClass(ManagementScope, ManagementPath, ManagementOptions) 
     Dim InputParameters As System.Management.ManagementBaseObject = ManagementClass.GetMethodParameters("Create") 
     InputParameters("CommandLine") = "cmd /c copy \\192.168.100.12\c$\remotefile.txt c:\localfile.txt" 
     Dim OutputParameters As System.Management.ManagementBaseObject = ManagementClass.InvokeMethod("Create", InputParameters, Nothing) 
     MsgBox("done") 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 

어떤 아이디어 왜 ISN : 나는 여기에 calc.exe 등을 시작으로 나는 대상 및 원격 실행에 연결하는 WMI를 사용하여 잘 작동 할 수 있습니다 작동하지 않는 코드 일하는거야? 아니면 누구든지 내가하려는 일을하는 더 나은 방법이 있습니까?

답변

3

보안상의 이유로 원격 시스템에 프로그래밍 방식으로 연결하고 다른 시스템에서 파일 자체를 복사하도록 지시하는 대부분의 방법이 차단됩니다. 마침내 나를 위해 일한 한 가지는 FTP입니다. 나는 이런 식으로 뭔가를 할 수있는 위의 코드를 사용하여 :

C를 사용하여 원격 시스템에서 실행할 수있는 FTP의 명령 행 유틸리티를 야기
InputParameters("CommandLine") = "ftp -s:c:\ftpscript.txt" 

: \ ftpscript.txt은에서 명령 목록을 얻을 수 있습니다.

InputParameters("CommandLine") = "cmd /c echo myFTPCommands > c:\ftpscript.txt" 

을 그리고이 작품 :)

UPDATE을 : (다시, 아니 UNC 연결) 대상에 FTP 스크립트 파일을 복사 할 수있는 방법이 없기 때문에, 내가 먼저 할 수있는 생각하지 마십시오 XCOPY를 사용하고 완벽하게 작동합니다 :

InputParameters("CommandLine") = "cmd /c echo F | xcopy remotefile localfile" 

UPDATE : XCOPY 어제 일, 지금은 그렇지 않습니다. 아무것도 변경되지 않았으므로 설명을 완전히 잃어 버렸습니다.

4

프랭크 작성한 방법이 원격 파일 복사본의 WMI 제한을 극복 한 첫 번째 가능성이 높기 때문에 실제로 크레디트를 부여해야합니다! 나는 3 주 동안 정보/해결책을 찾고 있었고, 당신 만이 작동하는 유일한 사람이었습니다! 내가 솔루션에 대한 투표를하는 어떤 지점을했다 ... 경우

나는 당신의 방법에 따라 완벽하게 작동 VBS & WMI 스크립트를 작성 : 당신이 원하는대로 스크립트를 필요에 따라 myFTPCommands 교체

InputParameters("CommandLine") = "cmd /c echo myFTPCommands > c:\ftpscript.txt" 

c : \ ftpscript.bat 파일 (또는 .vbs, .ps1 또는 원하는 파일)로 이동하십시오. 한 줄짜리 스크립트에 충분한 텍스트를 넣을 수 없으면 >>를 사용하여 같은 방법으로 추가하십시오. 이제 XCOPY, PSEXEC, COPY 또는 다른 어떤 것을 사용하여 원격 호스트의 파일 시스템에서 방금 작성한 스크립트를 실행할 수 있습니다.

Here's 내 방법을 사용하여 VBScript를 완벽하게 처리합니다. 다시 한번 감사드립니다. :)

HTH, 리즈