Probleme mit Batch-Skripting un C++

Moin Moin,

ich benötige bitte etwas unterstützung bei einem kleinen Problem, welches mit einem Batchskript eventuell gelösst werden kann.

Es läuft bei uns ein Samba-Server, wo es eine spezielle gruppe giebt die nur sporadisch zugriff auf eine freigabe benötigt. es soll den usern also möglich sein, ein batch-skript auszuführen und darüber ein connect zu der Freigabe zu erhalten. Es soll bei einem Neustart nicht neu connectet werden!

folgendes habe ich schon:

Code:
net use U: \\HOST\share /user:<username>

danach kommt die passwort abfrage.

Jetzt auf den punkt gebracht was ich noch benötige:

ich möchte nicht das der user ein Passwort eingeben muss, gibt es eine möglichkeit dies auch gleich in der Batch-Datei übergeben zulassen?
ist es möglich, dass das Laufwerk nur temporär gemountet wird und nach einem neustart nicht mehr zur verfügung steht? es sind auch noch andere laufwerke gemountet, diese sollen aber beim neustart verfügbar bleiben!

habt ihr ideen ?
Thanks
 
danke ...

ich bin ebend auch noch darauf gestoßen und mit der erweiterung /PERSISTENT:NO wird sogar der relogin beim start verhindert ...

-.-

EDIT ---

gibt es unter windows einen befehl ähnlich wie sleep ?
 
Da dein Problem damit gelöst ist hier die Premium Lösung

EDIT:Ja die "Sleep"- Problematik ^^, nein gibts nicht aber es gibt einen Umweg:

ping 127.0.0.1 -n 4 >nul

macht ca. 4 Sekunden pause ^^




Hi,

ich habe das selbe auch gehabt.

Netzlaufwerke auf Knopfdruck verbinden, nur das ich einen Passwortabfrage möchte.

Bedenke jeder der sich mit Batch auskennt wird deine Batch öffnen und hat somit einen Benutzer und ein Passwort.


Ich habe das mit VBScript gelöst.

Dann wollte ich die Eingaben etwas schöner(GUI) gestalten und habe mich an HTA(MS HTML Application) gemacht.

Es funktioniert wunderbar, nur ein Bug den ich nicht zu lösen im stande bin, ist verblieben.

Nach dem Verbinden der Netzlaufwerke startet die HTA sich selbst nocheinmal ?!?

Code:
 <html>
<head>

<!--
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' File: MapNetworkDrives.hta
' Autor: Easyrider
' Version: 1.1 (focus() eingebunden)
'
' Verbindet Netzlaufwerke
'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SHOWINTASKBAR="no"
WINDOWSTATE="maximize"
-->
<HTA:APPLICATION ID="oHTA"

APPLICATIONNAME="MapNetworkDrives.hta"
BORDER="dialog"
BORDERSTYLE="complex"
CAPTION="yes"
SHOWINTASKBAR="yes"
SYSMENU="yes"
INNERBORDER = "no"
MAXIMIZEBUTTON = "no"
MINIMIZEBUTTON = "no"
WINDOWSTATE="normal"
SINGLEINSTANCE="yes"
CONTEXTMENU = "no"
SYSMENU = "no"
>

<title>MapNetworkDrives</title>

<style type="text/css">
tr {font-size:12Pt; color:#FFFFFF; font-style:bold; font-family:Arial, Verdana}
input {font-size:12pt; color:#000000; font-style:bold; font-family:Verdana}
H2 {font-size:14pt; color:#FFFFFF; font-style:bold; font-family:Verdana}
</style>



<script language="VBscript">
Const Titel = "MapNetworlDrives.hta"
Dim Host, User, Pw
Dim WSHShell : Set WSHShell = CreateObject("WScript.Shell")
Dim WshNetwork : Set WshNetwork = CreateObject("WScript.Network")

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sub Run()
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



Host = Document.All.Host.Value
If Host = "" Then Msgbox "Ein Hostname oder IP ist erforderlich" : Exit Sub

User = Document.All.UserName.Value
If User = "" Then Msgbox "Ein Username ist erforderlich" : Exit Sub

Pw = Document.All.UserPwd.Value
If Pw = "" Then Msgbox "Ein Passwort ist erforderlich" : Exit Sub

'Ping des Host's
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If not WMIPing(Host) Then
WSHShell.Popup Host & vbCRLF & vbCRLF & "Ist nicht erreichbar!" & vbCRLF & vbCRLF & "FIREWALL?A.U.S.?",4 ,Titel
self.close
Exit Sub
End If
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'Netzlaufwerke die Verbunden werden sollen
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WshNetwork.MapNetworkDrive "X:", "\" & Host & "FREIGABE1", false, User, Pw
WshNetwork.MapNetworkDrive "Y:", "\" & Host & "FREIGABE2", false, User, Pw
WshNetwork.MapNetworkDrive "Z:", "\" & Host & "FREIGABE3", false, User, Pw
WSHShell.Popup "Netzlaufwerke verbunden", 3, Titel
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Set WshNetwork = nothing
Set WSHShell = nothing


self.close

end sub

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Function WMIPing(PCName)
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Dim objPing, objStatus
WMIPing = True
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & PCName & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
WMIPing = False
End If
Next
End Function

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub OnLoad()
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
window.moveto screen.width/2-200,screen.height/2-150
window.resizeto 400,300
document.form.UserPwd.focus()
End Sub

</script>
</head>

<body onload="OnLoad()" bgcolor="#6D7B8D">

<form name="form">
<BR>
<h2 align="center">MapNetworkDrives</h2>
<fieldset>
<table border="0" width="100%">
<tr bgcolor="#657383" align="left">
<td>
Host:<BR>
Benutzername:<BR>
Passwort:<BR>
</td>
<td>
<input type="Text" Name="Host" Value="192.168.1.blubb" tabindex="4"><BR>
<input type="Text" Name="UserName" Value="ich" tabindex="5"><BR>
<input type="Password" Name="UserPwd" Value="" tabindex="1" ><BR>
</td>
</tr>
<tr bgcolor="#657383" align="center">
<td>
<input type="Submit" Name="Start" value="Start" onClick="Run()" tabindex="2"><BR>
</td>
<td>
<input type="Button" Name="Close" value="Abbrechen" onClick="self.close" tabindex="3">
</td>
</tr>
</table>
</fieldset>
</form>
</body>
</html>
Wirf das in eine Textdatei und benenne sie in .hta um.
 
die idee mit dem ping auf localhost um eine Zeitverzögerung zu erzielen ist super.

VB in allen ehren, aner ich habe mich für c++ enschieden und nutze ganz dirty die system()-funktion. akkerdings bringt mich das zu meinem nächsten problem...

escapesequenzen:

das script wird wie folgt aufgerufen:

Code:
system("net use U: \\HOST\SHARE /user:<user> password /PERSISTENS:no");
der aufmerksame coder wird das problem bestimmt schon bemerkt haben ...
system("net use U: \\HOST\SHARE /user:<user> password /PERSISTENS:no");

die escapesequenzen greifen und verhindern somit eine fehlerfrei übergabe der informationen... habt ihr dafür auch noch eine idee ?
 
1)Windows-Sleep
(angabe ist in millisekunden, also für 4 Sekunden 4000 angeben)
2) net use U:\\\\HOST\\SHARE /user:<user> password /PERSISTENS:no
sollte gehen.
 
In C++ kannst Du einfach ne Schleife programmieren, dann hast Du auch eine Wartezeit drin. Ist nicht ganz so "dirty" wie der Ping ;). So richtig hübsch wäre es, die Systemzeit abzufragen und so lange die darauffolgenden Zeiten abzufragen, bis eine gewünschte Anzahl von Sekunden überschritten wurde.

ciao

JM
 
danke für die hinweise, ich habe mich dafür entschieden, kein sleep einzufügen, der user startet nur noch das progemm, welches via "net use" die verbindung aufbaut ohne das er eine ausgabe bekommt.

die verpackung in c++ ist auch nur, damit die user die passwörter nicht ohne weiteres auslesen können. (Klar das es mit programmen wie strings(UNIX) funktioniert, aber diese tools laufen auf diesen rechner nicht, da es rechner für messungen sind)
 
Zu der Sache mit dem Ping als Sleep:

Das funktioniert nicht immer... ich hab das auch mal so realisiert gehabt in meiner Anfangszeit. Das gibt diverse Probleme mit Desktopfirewalls und so weiter...
 
@M4CH!N3 (Beruf: Azubi FIAN)

Natürlich funktioniert das mit dem Ping immer -.-

Ich habe das in einem meiner umfangreicheren Batchscripte(3 Seiten A4) im Einsatz.

Das Script benutzen mehrere 100 Techniker(mich eingeschlossen) auf völlig verschiedenen Systemen.

Im schlechtesten Fall ist keine Netzwerkkarte da, auch dann funktioniert "es".

Wenn ein Ping wegen einer Firewall blockiert wird, ist das auch nicht relevant, da Ping.exe trotzdem ein Paket abschickt.

Und das kostet Zeit. ~ 1Sekunde für einen Ping oder ein "Host unrechable" wie auch immer.

Wenn du schon nach deiner "Anfangszeit" endlich auf eine "bessere" Lösung gestossen bist, POSTE sie und erwarte keine Gnade.
 
Zurück
Oben