Veröffentlicht am 25.10.2015

Server-Verbindung per AppleScript

Das Herstellen einer Verbindung zu einem Dateiserver ist unter MacOS gerade für ungeübte Nutzer oft zu umständlich. Ich habe ein AppleScript geschrieben das sich bequem in der Programmleiste hinterlegen lässt und automatisch alles weitere regelt. Mit den folgenden Schritten könnt ihr das Script an euren eigenen Server anpassen und daraus ein startbares Programm erstellen. Ihr braucht dafür nur einen Computer mit MacOS, alles nötige ist schon vorinstalliert.

Was macht das Programm? Es prüft ob eine Internetverbindung und ggf. eine Intranetverbindung besteht und gibt dem User andernfalls eine Warnung aus. Danach wird die Verbindung zum Server hergestellt und ein Server-Ordner geöffnet.

Schritt 1

Zuerst öffnet ihr "Script-Editor", zu finden im Programme-Ordner unter "Dienstprogramme" oder über die Spotlight-Suche. Als nächstes nehmt ihr den folgenden Programmcode und fügt ihn im Script-Editor ein:

-- Die IP-Adresse des Servers
set server_ip to "X.X.X.X*"

-- Der Name des Servers (frei wählbar, wird nur für die Nutzerdialoge verwendet)
set server_name to "Serververbindung"

-- Das Volume zu dem sich das Programm automatisch verbinden soll
set mount_volume to "Serverordner"

-- Adressen zum Testen der Internet- und Intranet-Verbindung
set intranet_test to "X.X.X.X"
set internet_test to "www.apple.com"

on connectToServer(server_ip, server_name, mount_volume)
	
	set mount_string to "afp://" & server_ip
	set mount_volume_str to mount_string & "/" & mount_volume
	set volume_is_mounted to true
	
	set intranet_test_flag to false
	set internet_test_flag to false
	
	set count_testserver to 1
	
	set mountedDisks to paragraphs of (do shell script "/bin/ls /Volumes")
	if "Forall" is not in mountedDisks then
		set volume_is_mounted to false
	end if
	
	if volume_is_mounted is not true then
		repeat with idx from 1 to 5
			
			try
				set ping_result to (do shell script "ping -c 1 -t 1 " & server_ip)
				set count_testserver to 10
			on error
				set count_testserver to (count_testserver + 1)
				delay 0.1
			end try
			
			if count_testserver = 10 then
				exit repeat
			end if
			
		end repeat
		
		if count_testserver = 10 then
			delay 0.3
			tell application "Finder"
				mount volume mount_volume_str
			end tell
			
			display notification "Die Serververbindung wurde hergestellt. Willkommen auf " & server_name & "!" with title "Verbindung hergestellt" subtitle "Willkommen auf " & server_name
		end if
		
		if count_testserver = 6 then
			try
				set ping_result to (do shell script "ping -c 1 -t 1 " & intranet_test)
				set intranet_test_flag to true
			on error
				set intranet_test_flag to false
			end try
			try
				set ping_result to (do shell script "ping -c 1 -t 1 " & internet_test)
				set internet_test_flag to true
			on error
				set internet_test_flag to false
			end try
			
			if not internet_test_flag and not intranet_test_flag then
				display dialog "Du hast keine Internetverbindung! Bitte prüfe ob du mit einem WLAN-Netz verbunden bist oder ein Netzwerkkabel an deinen PC angeschlossen ist." buttons {"Abbrechen"} default button {"Abbrechen"} with icon path to resource "applet.icns" in bundle (path to me)
				
			else if internet_test_flag and not intranet_test_flag then
				display dialog "Es besteht keine Verbindung zum pme-Intranet. Du musst dich entweder in einem Standort-Netz befinden oder dich mit der Tunnelblick-Software in das Intranet einwählen." buttons {"Tunnelblickverbindung herstellen", "Abbrechen"} default button "Tunnelblickverbindung herstellen" with icon path to resource "applet.icns" in bundle (path to me)
				
				if button returned of result = "Tunnelblickverbindung herstellen" then
					tell application "Tunnelblick"
						set the_values_list to get configurations
						set the list_count to the count of the_values_list --gets number of items in list
						set pick to random number from 1 to list_count --has it choose a random item
						connect (get name of (configuration pick))
						
						set count_tunnelblickconnect to 1
						get state of configuration pick
						repeat until result = "CONNECTED"
							delay 1
							set count_tunnelblickconnect to (count_tunnelblickconnect + 1)
							
							if count_tunnelblickconnect = 60 then
								display dialog "Die Verbindung zum Server konnte nicht hergestellt werden. Bitte versuch es in ein paar Minuten erneut." buttons {"OK"} default button {"OK"} with icon path to resource "applet.icns" in bundle (path to me)
								return
							end if
							get state of configuration pick
						end repeat
						
						delay 0.3
						tell application "Finder"
							mount volume mount_volume_str
						end tell
						
						display notification "Die Serververbindung wurde hergestellt. Willkommen auf " & server_name & "!" with title "Verbindung hergestellt" subtitle "Willkommen auf " & server_name
					end tell
				end if
				
			else
				display dialog "Die Verbindung zum Server konnte nicht hergestellt werden. Bitte versuch es in ein paar Minuten erneut." buttons {"OK"} default button {"OK"} with icon path to resource "applet.icns" in bundle (path to me)
			end if
		end if
	end if
end connectToServer

connectToServer(server_ip, server_name, mount_volume)

try
	delay 0.3
	tell application "Finder"
		activate
		tell application "Finder" to make new Finder window
		set the target of the front Finder window to folder mount_volume
	end tell
end try

Am Anfang des Scripts müsst ihr jetzt noch drei Werte anpassen. Die Server-IP-Adresse findet ihr auf dem Dateiserver in den Netzwerkeinstellungen. Zum Ausprobieren könnt ihr sie im Finder unter "Gehe zu" -> "Mit Server verbinden..." eingeben. Wenn ihr den Server dadurch erreicht ist die Adresse richtig. Ersetzt im Code den Wert X.X.X.X durch diese Adresse (Achtung: Die Anführungszeichen am Anfang und am Ende müssen bleiben!).
Der zweite zu ersetzende Wert ist in der vierten Zeile "Serververbindung". Hier könnt ihr einen Titel eurer Wahl eingeben. Achtet auch hier darauf dass Anführungszeichen am Anfang und am Ende des Titels stehen.
Als drittes muss noch der Serverordner in der sechsten Zeile eingetragen werden. Der Serverordner ist ein freigegebener Ordner auf dem Server, der automatisch geöffnet werden soll. (Achtung hier wieder: Anführungszeichen!)
Außerdem müssen noch IP-Adressen für die Internet- und Intranetverbindung angegeben werden. Für die Internetverbindung wird hier mit "www.apple.com" getestet - wenn diese Seite erreichbar ist weiß das Script dass eine Internetverbindung besteht. Für Euer Intranet könnt ihr eine beliebige IP-Adresse im Netzwerk angeben.

Ob das Script funktioniert könnt ihr jetzt sofort testen: Klickt im Script-Editor auf "Script ausführen".

Schritt 2

Als nächstes generieren wir aus diesem AppleScript ein ausführbares Programm. Klickt dafür auf das Symbol "Skript übersetzen".

Danach wählt ihr oben in der Programmleiste vom Script-Editor Ablage->Exportieren.

Im Exportieren-Fenster könnt ihr das Script an einen Ort eurer Wahl exportieren. Stellt als Dateiformat "Programm" ein und setzt einen Haken bei "Nur ausführbar". Nun könnt ihr die Datei sichern.

Ihr erhaltet ein ausführbares Programm das ihr auch in der Programmleiste hinterlegen könnt. Als kleine Verbesserung zeige ich euch nun noch wie ihr das Programmsymbol austauschen könnt.

Schritt 3

Als Programmsymbol könnt ihr im Prinzip ein Bild eurer Wahl benutzen. Es muss nur quadratisch sein da es sonst an den Seiten abgeschnitten wird. Aus dem Bild muss dann eine .ICNS-Datei erstellt werden. Ich benutze dafür das Programm "Image2icon" das auch in der kostenlosen Version jede Bilddatei in eine .ICNS-Datei umwandelt. Benennt die entstandene Datei in "applet.icns" um. Ihr könnt auch mein Beispielicon benutzen.

Als nächstes macht ihr einen Rechtsklick auf die im Schritt 2 erzeugte Programmdatei und wählt "Paketinhalt zeigen".

Im Ordner Contents->Resources sollte sich bereits eine Datei "applet.icns" befinden. Ersetzt diese Datei mit eurer selbst erstellten Icon-Datei und schon hat sich das Programmsymbol geändert.

Programmierung AppleScript

Kommentar schreiben