2015-11-02 25 views
2

我有一個名爲「遠程Dongle讀卡器」的Python項目。大約有200臺機器安裝了「Dongle」,並有一個對應的.exe文件稱爲「Dongle Manager」。運行加密狗管理器使用加密狗的信息吐出一個「掃描」.txt文件。Python - 網絡WMI遠程運行EXE,並抓取文本結果

我正在嘗試編寫一個腳本,該腳本從中央位置運行,該中央位置具有對整個網絡的管理域訪問權限。它將讀取主機名列表,遍歷每個主機名,並將所有文件恢復。一旦它帶回所有文件,它就會編譯成csv。

我讓它在我的實驗室/測試服務器上工作,但是在生產系統中,它並沒有工作。我想知道這是否是某種登錄問題,因爲人們可能正在積極使用該系統。這個過程需要默默地啓動,並且在背景中做所有事情。但是,因爲我正在連接到管理員用戶,所以我想知道是否有衝突。

我不確定除了tge應用程序以外發生了什麼,直到我期望該文件在那裏。 「加密狗管理器」進程開始,但它似乎並沒有在沒有以管理員身份登錄的計算機上掃描(我正在使用的帳戶)。

以下是代碼的WMI部分的代碼片段。這是一個非常快速的腳本,所以我對任何非pythonic語句進行了僞裝。

 c = wmi.WMI(ip, user=username, password=password) 

     process_startup = c.Win32_ProcessStartup.new() 
     process_startup.ShowWindow = SW_SHOWNORMAL 
     cmd = r'C:\Program Files\Avid\Utilities\DongleManager\DongleManager.exe' 
     process_id, result = c.Win32_Process.Create(CommandLine=cmd, 
                ProcessStartupInformation=process_startup) 
     if result == 0: 
      print("Process started successfully: %d" % process_id) 
     else: 
      print("Problem creating process: %d" % result) 
     while not os.path.exists(("A:/"+scan_folder)): 
      time.sleep(1) 
      counter += 1 
      if counter > 20: 
       failed.append(hostname) 
       print("A:/"+scan_folder+"does not exist") 
       return 

     time.sleep(4) 

     scan_list = os.listdir("A:/"+scan_folder) 
     scan_list.sort(key=lambda x: os.stat(os.path.join("A:/"+scan_folder, x)).st_mtime, reverse=True) 
     if scan_list is []: 
      failed.append(hostname) 
      return 

     recursive_overwrite("A:/"+scan_folder+"/"+scan_list[0], 
          "C:\\AvidTemp\\Dongles\\"+hostname+".txt") 

假設我得到一個連接(計算機上),它通常會失敗在哪裏創建它TEH文件夾或者等待的時間點,或者期望東西scan_folder的列表...無論哪種方式,是東西從創建停止掃描,即使過程已經開始

編輯,我安裝爲A:在代碼/別處

+0

我注意到的一件事...如果當前沒有用戶登錄但計算機已啓動,則不會創建文件 – Busturdust

+1

SW_SHOWNORMAL沒有登錄桌面可能是問題。不要嘗試或SW_HIDE。 – tdelaney

+0

第一個測試很有前途...... @tdelaney在測試產品之前需要完成一些其他任務,會讓你知道 – Busturdust

回答

1

的問題是,你要求顯示應用程序窗口,但有沒有登錄桌面顯示它。 WMI經常使用的示例SW_SHOWWINDOW但這通常是錯誤的選擇,因爲WMI您通常試圖在後臺運行某些內容。在這種情況下,SW_HIDE(或沒有)是更好的選擇。