Applescript mehere SMB Verbindungen

kattnerzone

Registriert
Thread Starter
Dabei seit
14.03.2011
Beiträge
3
Reaktionspunkte
0
Guten Morgen,

ich bin absoluter Appleneuling und brauche Hilfe bei einem Applescript.

Ich benötige ein Applescript mit dem ich mehere SMB Verbindungen (Windows Domäne) aufbauen kann.

Habe zur Zeit die Möglichkeit genutzt, eine Serververbindung (Apfel+K) aufzubauen, was auch erfolgreich war. Diese habe ich dann auch zu den Anmeldeobjekten hinzugefügt. Bloß leider möchte der Mac die Verbindungen schon aufbauen, bevor die WLan Verbindung steht und somit hat er bei den ersten 3 Verbindungen Probleme.

Ich bräuchte ein Applescript, welches nach einem Delay von 20 Sekunden anfängt die SMB Verbindungen aufzubauen. Leider komme ich mit den Sachen, die ich bis jetzt im Netz gefunden habe nicht klar, da ich in diesem Bereich absoluter Neuling bin.

Beispiel:

Server 1 Verbindung 1: 192.168.178.1/Ordner1

Server 1 Verbindung 2: 192.168.178.1/Ordner2

Server 2 Verbindung 1: 192.168.178.2/Ordner1

Wie muss das dann auch mit der Authentifizierung aussehen?

Domäne: Windows
Benutzer: Meier
Kennwort: meier

Könnte mir da evtl. jemand den Quellcode für das Script posten.

Vielen Dank schon mal für eure Hilfe.
 
du kannst das entweder mit der URL machen, dort user und passwort.
smb://user:pass@192.168.178.1/Ordner
oder halt im applescript
mount volume "smb://192.168.178.1/Ordner" as user name "user" with password "pass"
 
Ich benutze folgendes Skript:

PHP:
-- ::::::::::::::::::::::::::::::::::::::::  hohabadu.de  ::::::::::::::::::::::::::::::::::::::::

(*   (c) by H =:o) L G I  (alias Holger Hansen)Ich würde mich freuen, wenn bei Verwendung des Codes oder Teilen davondiese Zeilen erhalten bleiben, zumindest aber die Zeile m. d. Hinweis auf die Website *)

--edited by Pill


(*___Enter Your Information Here___*)

set LocalNetAD to "local IP" --local network address of your server
set RemoteNetAD to "global IP" --global network address of your server
set LocalNetList to {"SSID1", "SSID2"} --list of local network SSID(s)
set RemoteNetList to {"SSID3", "SSID4"} --list of remote network SSID(s)
set volList to {"Disk1", "Disk2"} --list of volumes


(*___Check Network___*)

delay 5

--check current SSID
set currentSSID to do shell script "System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport --getinfo | grep -w 'SSID' | sed s/' *SSID: '//"

if currentSSID is in LocalNetList then
	set serv to LocalNetAD
else
	if currentSSID is in RemoteNetList then
		set serv to RemoteNetAD
	else
		return
	end if
end if


(*___mounting volumes, if necessary and the Server is available___*)

-- check, if the server is available
if my checkServer(serv) then
	repeat with vol in volList
		-- check, if volume isn't already mounted
		if vol is not in (list disks) then
			mount volume "afp://" & serv & "/" & vol
		end if
	end repeat
else
	activate
	display dialog "Server \"" & serv & "\" isn't available at this moment!" with icon stop giving up after 20
end if


on checkServer(ServerIP)
	try
		do shell script "ping -t2 -c1 " & ServerIP
		return true
	on error
		return false
	end try
end checkServer

Das Skript checked, ob und mit welchem WLAN du verbunden bist und entscheidet dann ob übers Internet oder über das lokale Netzwerk zugegriffen wird. Das ganze funktioniert für mehrere Shares. Das Passwort muss beim ersten mal im Schlüsselbund gespeichert werden, danach ist keine manuelle Eingabe mehr nötig. Dadurch vermeidest du deine Passwörter unverschlsselt irgendwo speichern zu müssen.
 
Sei mir nicht Böse Pill, aber von deinem Script verstehe ich nur die Hälfte. Ich bin da echt ein DAU.

Bekomme da irgenwie nicht raus, wo ich dort meine Parameter einfügen muss.

oneOeight:

Wie müssen denn dann mehere Zeilen in dem Script aussehen? Da muss man doch bestimmt auch etwas mit "IF" und "End IF" machen? Wie bekomme ich dort dann das Delay rein? So ähnlich hatte ich das im Netz schon mal gefunden, nur weiß ich nicht, wie das mit meheren Verbindung hintereinander aussehen muss.

Mit dem Passwort nicht im Klartext speichern ist eine ganz coole Sache, bloß wäre das in meinem Fall nicht so wichtig, weil sowieso alle aus der Firma das Kennwort kennen und Zugriff auf die Ordner haben.

Trotzdem schon mal Danke für eure Bemühungen.
 
Du musst im Abschnitt "Enter your Information here" für die rot markierten Sachen deine Werte einsetzen.

Beispiel: Normalerweise verbindest du dich mit Apfel+K und gibst ein: smb://192.168.2.1/Data.

Dann gibst du oben statt "local IP" "192.168.2.1" ein, statt {"Disk1", "Disk2"} gibst du {"Data"} ein, statt {"SSID1", "SSID2"} gibst du {"Dein Netzwerkname"} ein und dann musst du noch im Abschnitt (*___mounting volumes, if necessary and the Server is available___*) nach mount volume aus dem "afp" ein "smb" machen.
 
Ansonsten probier das mal:

PHP:
set ServerList to {"smb://192.168.178.1/Ordner1","smb://192.168.178.1/Ordner2","smb://192.168.178.1/Ordner2"}

delay 20

repeat with Server in ServerList
	mount volume Server
end repeat
 
Aha das habe ich jetzt schon mal verstanden.
Jetzt habe ich noch weitere Fragen.

1: Welche IP und SSID muss beim RemoteNetAD und RemoteNetList angeben. Die Ziel-IP gebe ich ja bei LocalNetAD ein. Das eigende WLAN dann bei SSID3.
2: Kann ich auch bei den Disk1 usw. Pfade angeben z.B. Ordner1/Test/Meier? oder müsste ich dann auf dem Windowsserver eine Freigabe Meier erstellen?
3: Kann ich den Check Network so übernehmen (Natürlich SSID austauschen)?
4: Muss ich hier ("System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport --getinfo | grep -w 'SSID' | sed s/' *SSID: '//") den Speicherort des Scripts angeben, oder für was ist der Pfad da?
 
Wenn man eine Netzwerkfestplatte mountet, die sich nicht im eigenen Netzwerk befindet, dann braucht man eine andere IP Adresse (die öffentliche IP). D.h. für
1.: RemoteNetAD ist die öffentliche IP, RemoteNetList ist eine Liste aller Netzwerke, in denen sich der Server nicht befindet. Wenn du nicht von außerhalb zugreifen willst, dann lässt du das einfach so.
2.: Ja, du kannst auch Pfade angeben und zwar genauso wie du es beschrieben hast.
3.: SSIDs musst du nur ganz oben einsetzen. Ansonsten musst du nur unten das afp mit smb ersetzen wie oben beschrieben, da du ja Sambaserver mounten willst und kein afp.
4.: Diese Zeile dient dazu vom Airport den aktuellen Netzwerknamen zu bestimmen. Der Pfad sollte bei Snow Leopard immer gleich sein, musst dualso nicht ändern.
 
also das mit dem remoteSSID und localSSID finde ich nen bissl zu kompliziert.

Ich mache das so:

- ping auf lokale Adresse des Serers (192.168.1.50)
- wenn ping ok dann mounte mit interner IP ansonsten ping auf externe ip (meinserver.dyndns.org)
- wenn ok dann baue ssh verbindung auf, mounte shares

Damit ist es egal ob du jetzt bei dir zu hause im WLAN bist oder mal das Netzwerkkabel angestöbselt hast. Durch den ping wird entschieden ob du grad direkten Zugriff zum Netz hast oder eben nicht
 
also das mit dem remoteSSID und localSSID finde ich nen bissl zu kompliziert.

Ich mache das so:

- ping auf lokale Adresse des Serers (192.168.1.50)
- wenn ping ok dann mounte mit interner IP ansonsten ping auf externe ip (meinserver.dyndns.org)
- wenn ok dann baue ssh verbindung auf, mounte shares

Damit ist es egal ob du jetzt bei dir zu hause im WLAN bist oder mal das Netzwerkkabel angestöbselt hast. Durch den ping wird entschieden ob du grad direkten Zugriff zum Netz hast oder eben nicht

Ich hab das damals so gelöst, weil ich nicht wollte, dass die Verbindung in jedem Netzwerk hergestellt wird, da teils auch andere mit meinem Rechner arbeiten.
 
@ winniwinter

ALso genau diese Ping abfrage intresiert mich, wobei ich den Mount befehl im automator nutze als Apple script. wie binde ich denn da den Ping Befehl als bedingung ein das er erst sich verbinden soll wenn er kontakt mit dem server hat und wenn nicht eine fehler meldung raus schmeisst.
Bei mir hängt der sich regelmäßig auf wenn der server nicht zu erreichen ist und er die shares nicht mounten kann.
Wäre klasse wenn du mir da was sagen könntest.

Danke schon mal
 
so könnte man das machen:

Code:
set ServerIP to "192.168.1.1" -- hier die IP eintragen

 if my checkServer(ServerIP) is true then
(*hier den Code einfügen*)
end if

on checkServer(ServerIP)
	try
		do shell script "ping -t2 -c1 " & ServerIP
		return true
	on error
		return false
	end try
end checkServer
 
Zurück
Oben Unten