2015-02-06 50 views
1

我想編寫一個程序使用域管理員用戶憑證登錄到遠程計算機並執行以下任務窗口使用C#/ C++

  1. 得到像OS一些系統信息,IIS版本,.NET版本遠程登錄API etc
  2. 將一些文件從遠程傳輸到本地機器,反之亦然。

是否有任何Windows API來做到這一點?

我試圖做的任務可以使用遠程桌面應用程序手動完成,但我不想使用GUI,因爲我想自動執行此操作,從我們的環境中定期獲取機器信息並顯示在儀表板中。

+0

有API的自動化,但在服務主機他們沒有默認啓用,需要手動啓動,這是一個問題。 – 2015-02-06 17:06:08

+0

我想使用「遠程桌面」使用的相同API,因爲所有設置都是一樣的。 – user1453927 2015-02-09 14:13:46

+0

那麼,用於遠程桌面的API不提供獲取該信息的方式,而不實際獲得完整的遠程桌面會話。這意味着在非服務器版本的Windows中,您將斷開使用計算機的人員連接,因爲它一次只能有一個人登錄。那是你要的嗎? – 2015-02-09 16:34:19

回答

1

可以使用WinRM的 和使用PowerShell https://msdn.microsoft.com/en-us/library/aa384426%28v=vs.85%29.aspx

這裏是一個用VB example(你可以使用C#相同的COM對象)

Const RemoteComputer = "ComputerName.domain.com" 
Set objWsman = CreateObject("Wsman.Automation") 
Set objConnectionOptions = objWsman.CreateConnectionOptions 
objConnectionOptions.UserName = "Username" 
objConnectionOptions.Password = "Password" 
iFlags = objWsman.SessionFlagUseKerberos Or _ 
    objWsman.SessionFlagCredUserNamePassword 
Set objSession = objWsman.CreateSession("https://" & RemoteComputer, _ 
    iFlags, objConnectionOptions) 
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" & _ 
    "wmi/root/cimv2/Win32_OperatingSystem" 
Set objResponse = objSession.Enumerate(strResource) 

While Not objResponse.AtEndOfStream 
    DisplayOutput(objResponse.ReadItem) 
Wend 

'**************************************************** 
' Displays WinRM XML message using built-in XSL 
'**************************************************** 
Sub DisplayOutput(strWinRMXml) 
    Dim xmlFile, xslFile 
    Set xmlFile = CreateObject("MSXml2.DOMDocument.3.0") 
    Set xslFile = CreateObject("MSXml2.DOMDocument.3.0") 
    xmlFile.LoadXml(strWinRMXml) 
    xslFile.Load("WsmTxt.xsl") 
    Wscript.Echo xmlFile.TransformNode(xslFile) 
End Sub 
+0

謝謝rravuri,使用winrm我將不得不在每個遠程服務器上啓用/配置winrm(https://support.microsoft.com/kb/555966/en-us)。我的觀點是,如果我可以使用「遠程桌面」遠程登錄,爲什麼我不能從我自己的應用程序使用相同的API?如果我可以使用相同的API與遠程服務器進行交互,則不需要依賴其他API /必須啓用/禁用它們。 – user1453927 2015-02-09 13:37:11