badfsaadkl
Goto Top

Datei übertragen auf anderen Server via Visual Studio

Datei übertragen auf anderen Server via Visual Studio

Hallo Zusammen,


ich suche eine Möglichkeit, um in einem Programm, welches ich in Visual Studio 2005 programmiere,
eine Datei aus dem Programm herraus (am Ende der Prozedur), auf einen anderen Windows 2003 Server in ein Verzeichniss zu kopieren.

Vorraussetzung ist jedoch, nicht die Verwendung von Netzlaufwerken...

Jedoch kann auf dem "Quell-PC" nicht weiter installiert werden, außer das Programm, welches ich programmiere...
auf den Ziel-Server, kein problem....

Gibts es hier eine Möglichkeit via z.B. FTP oder WMI ???

Danke

Content-ID: 135586

Url: https://administrator.de/contentid/135586

Ausgedruckt am: 25.11.2024 um 19:11 Uhr

dog
dog 09.02.2010 um 23:49:57 Uhr
Goto Top
Ähm...wie jetzt?

http://msdn.microsoft.com/en-us/library/system.io.file.aspx

In members that accept a path, the path can refer to a file or just a directory. The specified path can also refer to a relative path or a Universal Naming Convention (UNC) path for a server and share name.
mayho33
mayho33 10.02.2010 um 00:04:26 Uhr
Goto Top
Hi und Sorry?

Du willst in VB2005 eine Datei zwischen 2 Servern kopieren ohne, ich nehme an, gemappte, sprich, Netzlaufwerksbuchstaben?

WArum nicht VBS? da musst du garnix installieren. Alles schon da. Auch FTP braucht irgendeine Freigabe oder eine Share oder sonstwas damit du da was hincopieren kannst.

Versteh dich glaube ich nicht ganz. Kannst du das genauer erklären?

Grüße
BadFsaadKl
BadFsaadKl 10.02.2010 um 10:26:54 Uhr
Goto Top
Hallo Mayho33,


genau.
aber um genau zu sein, will ich diversen Workstation's eine Datei, in Ein Verzeichniss auf einen Server kopieren.
Jedoch, ohne auf jedem dieser Workstations eine Netzlaufwerk einrichten zu müssen.

Auf den Zielserver einen FTP-Client zu installieren, wäre ein Möglichkeit. welche ich aber erst als letztes in Erwägung ziehen möchte.

Wie würde ich denn die Dateien via VBS übermitteln können ?
Und wie kann ich das VBS - Script dann in das Programm integrieren ?

Danke
mayho33
mayho33 10.02.2010 um 20:12:38 Uhr
Goto Top
Hi!

Etwa so:

Set oShell = WScript.CreateObject("WScript.Shell")
Set oFso = CreateObject("Scripting.FileSystemObject")

appPath = ofso.getparentfoldername(wscript.scriptfullname)

'########################
'# Variante 1
'Host = InputBox("IP oder Hostmane:")


CopyPath = "\\" + Host + "\c$\Windows\Dateiname"

If ofso.FileExists(copypath + ".txt") Then
ofso.CopyFile copypath + ".txt", apppath + "\", True
End If

'########################
'# Variante 2
RangeHost = InputBox("IP oder Hostmane getrennt durch ""|"" eingeben:")
arrRangeHost = Split(RangeHost, "|")
LenarrRangeHost = UBound(arrRangeHost)

x = 0

Do
copypath = "\c$\Windows\Dateiname"
FullCopyPath = "\\" + arrRangeHost(x) + CopyPath + ".txt"

If ofso.FileExists(FullCopyPath) Then
ofso.CopyFile FullCopyPath, apppath +"\", True
WScript.Sleep 1500
ofso.MoveFile apppath + "\dateiname.txt", apppath + "\dateiname" + "_" + arrRangeHost(x) + ".txt"
End If
x = x + 1
Loop Until x > LenarrRangeHost
BadFsaadKl
BadFsaadKl 11.02.2010 um 09:41:38 Uhr
Goto Top
Hallo Mayho33,


Danke für den Code.
Funktioniert Lokal wunderbar.

Jetzt bräucht nur noch die Info, wie, wo ich die Zugangsdaten für den Server eingebe.
Sprich Benutzername, Password.

Danke
mayho33
mayho33 11.02.2010 um 21:12:57 Uhr
Goto Top
Hi!

Eigentlich wird das Script am Server ausgeführt und holt von den Clients die Datei die du haben möchtest. in den Script-Pfad Da am Server eh nur der Admin was zu suchen hat sollte im AD das Script eigentlich problemlos ohne Login funktionieren.

LOgon ginge z.B. über die WMI wenn du das unbedingt brauchst.
BadFsaadKl
BadFsaadKl 16.02.2010 um 14:37:49 Uhr
Goto Top
Hallo Mayho33,


Danke für den Code.
Kennst du auch eine Möglichkeit, das ganze nun doch via Visual Basic umzusetzen ?
Ausführen von Scripten auf dem Server ist leider nicht mehr möglich (Firmenpolitik face-sad )....

Würde das ganze gerne über die System.Management & Filesystem Klasse machen, falls das geht.

Habe bereits bissle rumgetüftelt, aber fehlt mir noch einiges face-sad...

Imports System
Imports System.Management

Dim Options As ConnectionOptions
Options = New ConnectionOptions
Options.Username = "###"
Options.Password = "###"

Dim Path As ManagementPath
Path = New ManagementPath("\\Server\root\CIMV2:Win32_LogicalDisk.DeviceID=""C:""")
Dim path2 = "C:\web.txt"

Hab bis jetzt nur mit dem ManagementScope und ObjectQuery mit paar Infos auslesen können...
Jedoch komme ich mit dem Filetransfer noch net so klar.

Kannst du mir da weiterhelfen ?

Danke
dog
dog 16.02.2010 um 14:53:20 Uhr
Goto Top
Vielleicht liest du dir einfach nochmal meinen ersten Kommentar genau durch face-wink
BadFsaadKl
BadFsaadKl 16.02.2010 um 15:34:37 Uhr
Goto Top
Hab ich mir schon durchgelesen.
Komme jedoch net mit zurecht, wie ich beim Zielpfad, die Zugangsdaten mitgebe.

Bei der Scope-Finktion siehts wie folgt aus:
'scope = New ManagementScope("\\Server\root\CIMV2", Options)
' Die Opteions sind die Zugangsdaten.

bei der ManagementPath Funktion klappt das aber irgendwie net so.
dog
dog 16.02.2010 um 16:04:53 Uhr
Goto Top
Sicher nicht schön (weil man über die C-API gehen muss) aber über WNetAddConnection2 kannst du dich mit einem Share verbinden: http://msdn.microsoft.com/en-us/library/aa385413%28VS.85%29.aspx
Damit solltest du die notwendige Session zum Kopieren haben.
(Das lpLocalName Attribut des NETRESOURCE Structs muss leer sein).
mayho33
mayho33 18.02.2010 um 23:11:09 Uhr
Goto Top
Hi!

Hier ein Beispiel. Gefunden in der allgemeinen Hilfe

geschrieben in VB2008 musst du also eventuell ein wenig anpassen und ist ungetestet

Auf System.Management musst du explizit einen Verweis setzen


Imports System
Imports System.Management
Imports System.IO

Module Module1
Sub main()
'User/Passwort übergeben
Dim Anmelden() As String = {"USER", "PASSWORT"}

RemoteConnect.Main_(Anmelden)
End Sub


Public Class RemoteConnect

Public Overloads Shared Function Main_(ByVal args() As String) As Integer

'User/Passwort übernehmen
Dim options As ConnectionOptions
options = New ConnectionOptions
options.Username = args(0)
options.Password = args(1)

'VErbindung aufbauen
Dim scope As ManagementScope
scope = New ManagementScope("\\SERVERNAME:Win32_LogicalDisk.DeviceID=""C:""", options)
scope.Connect()

' Query system for Operating System information
Dim query As ObjectQuery
query = New ObjectQuery( _
"SELECT * FROM Win32_OperatingSystem")
Dim searcher As ManagementObjectSearcher
searcher = _
New ManagementObjectSearcher(scope, query)

Dim queryCollection As ManagementObjectCollection
queryCollection = searcher.Get()

Dim m As ManagementObject
For Each m In queryCollection
' Daten anzeigen
Console.WriteLine("Computer Name : {0}", _
m("csname"))
Console.WriteLine("Windows Directory : {0}", _
m("WindowsDirectory"))
Console.WriteLine("Operating System: {0}", _
m("Caption"))
Console.WriteLine("Version: {0}", m("Version"))
Console.WriteLine("Manufacturer : {0}", _
m("Manufacturer"))
Next

Return 0
End Function
End Class




Grüße!


Mayho