s.wiesenbacher
Goto Top

Frage zu Anmeldeskript

Hi

ich verbinde in einem Anmeldeskript Netzlaufwerke, die dann z.B. Programme an Servername heißen. Ich möchte jetzt, dass Diese Laufwerk aber nur Programme heißt. Kann ich den Namen des Laufwerks im Skript irgendwie mitgeben?

Vielen Dank im Voraus

Content-ID: 10746

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

Ausgedruckt am: 15.11.2024 um 07:11 Uhr

gemini
gemini 16.05.2005 um 16:29:20 Uhr
Goto Top
From a Newsgroup post http://www.mcseboard.de/showthread.php?threadid=22357
Vielleicht hilft dir das.

"Schau mal in der Registry unter [HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2]
...
Also erstellst Du mal auf Deinem Rechner ein solches Netzwerklaufwerk und benennst es so, wie Du es haben willst. Dann ab in die Registry und den Key exportieren. Anschließend kannst Du ihn per Logon-Script einfach auf jeder Workstation importieren.
...
Hmm, setzt Dich mal zu so einer Maschine, verbind das Netzlaufwerk und benenne es im Explorer um. Dann suchst Du dir nochmal den Registry-Key raus und exportierst ihn. Anschließend löscht Du den Key aus der Registry, verbindest das Laufwerk neu und machst einen Doppelklick auf den exportierten Key..."
s.wiesenbacher
s.wiesenbacher 16.05.2005 um 16:36:20 Uhr
Goto Top
Danke für die schnelle Hilfe. Werde das gleich mal ausprobieren
s.wiesenbacher
s.wiesenbacher 16.05.2005 um 16:56:38 Uhr
Goto Top
Hab jetzt noch ein kleines Problem. Wie kann ich im vorfeld prüfen lassen, ob ein netzlaufwerk bereits besteht oder nicht?

im moment sieht das skript so aus, ohne das rem natürlich
@echo off

rem net use M: \\edv-f1.de\DFS\Musik /persistent:no
rem net use S: \\edv-f1.de\DFS\Software /persistent:no
rem net use F: \\w2k3srv02\e$\Download /persistent:no
rem net use H: \\edv-f1.de\DFS\Basisverzeichniss\%username%
Danke
gemini
gemini 16.05.2005 um 17:15:21 Uhr
Goto Top
@echo off

net use M: /d /y
net use S: /d /y
net use F: /d /y
net use H: /d /y

net use M: \\edv-f1.de\DFS\Musik /persistent:no
net use S: \\edv-f1.de\DFS\Software /persistent:no
net use F: \\w2k3srv02\e$\Download /persistent:no
net use H: \\edv-f1.de\DFS\Basisverzeichniss\%username%

Das löscht erstmal alle Verbindungen und baut sie neu auf.

Evtl. geht auch eine Abfrage auf die Laufwerksbuchstaben
If Not Exist M: (
net use M: \\edv-f1.de\DFS\Musik /persistent:no
)
usw.
Ob das funktioniert kann ich nicht sagen, normalerweise wird mit Exist das Vorhandensein von Dateien abgefragt.
s.wiesenbacher
s.wiesenbacher 16.05.2005 um 17:35:16 Uhr
Goto Top
super, vielen dank. kannst du mir eventuell nur noch kurz die parameter /d und /y erlätern? ich find zu denen im bezug auf net use nirgens was.

danke
gemini
gemini 16.05.2005 um 17:39:33 Uhr
Goto Top
/d = /DELETE = löschen
/y = yes

/y verhindert die Abfrage, ob wirklich gelöscht werden soll
s.wiesenbacher
s.wiesenbacher 16.05.2005 um 18:16:52 Uhr
Goto Top
super, vielen dank. das mit dem umbenennen klappt zwar leider nicht aber der rest geht ohne probleme.

danke nochmal für die schnelle hilfe
gemini
gemini 16.05.2005 um 18:21:26 Uhr
Goto Top
Tut mir leid, ich hab das wie gesagt nicht getestet.
fritzo
fritzo 16.05.2005 um 21:12:09 Uhr
Goto Top
' NameDrive.vbs  
' VBScript to map a network drive.  
' Authors Guy Thomas and Barry Maybury  
' Version 1.3 - January 23rd 2005  
' ----------------------------------------'  
'  
Option Explicit
Dim objNetwork, strDrive, objShell, objUNC
Dim strRemotePath, strDriveLetter, strNewName
'  
strDriveLetter = "Y:"  
strRemotePath = "\\alan\home"  
strNewName = "GuyDives"  

' Section to map the network drive  
Set objNetwork = CreateObject("WScript.Network")  
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath

' Section which actually (re)names the Mapped Drive  
Set objShell = CreateObject("Shell.Application")  
objShell.NameSpace(strDriveLetter).Self.Name = strNewName

Wscript.Echo "Check : "& strDriveLetter & " for " & strNewName  
WScript.Quit

' End of script  
s.wiesenbacher
s.wiesenbacher 16.05.2005 um 21:36:35 Uhr
Goto Top
hi, das skript schat echt super aus, nur leider versteh ich nur ca die hälfte. kannst mir das ganze etwas erläutern, was für was gut ist? Damit ich das dann nachher auch so machen kann wie ich es für meine laufwerke brauch.

big thx im voraus
fritzo
fritzo 17.05.2005 um 03:20:49 Uhr
Goto Top
Option Explicit
--> bei Fehlern Warnung

Dim objNetwork, strDrive, objShell, objUNC
Dim strRemotePath, strDriveLetter, strNewName
--> Variablen vorher dimensionieren, sonst Fehler

strDriveLetter = "P:"  
strRemotePath = "\\Server1\Freigabe1"  
strNewName = "Name_des_Laufwerks"  
--> Variablen für das Laufwerk definieren

' Section to map the network drive  
Set objNetwork = CreateObject("WScript.Network")  
--> ein Handle auf ein Network-Objekt erstellen, damit wir damit arbeiten können

objNetwork.MapNetworkDrive strDriveLetter, strRemotePath
--> mit dem Handle ein Share als Laufwerk anbinden
--> entspricht "net use P: \\Server1\Freigabe1"

' Section which actually (re)names the Mapped Drive  
Set objShell = CreateObject("Shell.Application")  
--> ein weiteres Handle für einen Zugriff auf das Laufwerk erstellen

objShell.NameSpace(strDriveLetter).Self.Name = strNewName
--> den Namen des Laufwerks ändern

Wscript.Echo "Check : "& strDriveLetter & " for " & strNewName  
--> einfache Stringausgabe zum Prüfen der Parameter, Hinweis

WScript.Quit
--> Script beenden

Alles klar? Du mußt also einfach die drei Variablen oben ändern: strDriveLetter, strRemotePath und strNewName - dann sollte das funktionieren. Pass es also an, speicher das so in ein Textfile namens RenameDrive.vbs oder ähnlich und führ es aus. Aus Deinem Logonscript heraus kannst Du es mit dem Kommando "call RenameDrive.vbs" aufrufen (wenn es nicht im selben Ordner liegen sollte, pack den Pfad noch dabei).

Grüße,
Arne (fritzo)
s.wiesenbacher
s.wiesenbacher 17.05.2005 um 20:08:42 Uhr
Goto Top
hi vielen dank für deine Mühe. Werd das gleich mal ausproboeren. sag dann bescheid ob es geklappt hat.
big thx
Babu
Babu 24.01.2007 um 13:48:19 Uhr
Goto Top
Hallo,

ich hab grade eben Dein Skript ausprobiert. Hab es, so wie beschrieben eins zu eins übernommen. Bis zur Zeile 20 funktioniert alles reibungslos. Dann erhalte ich eine Windows Fehlermeldung "Fehler: Objekt erforderlich: NameSpace(...)"

Ich bin ein absoluter vbs Laie, aber für mich hört sich dass an, als hätte ich eine Variable in den Zeilen zuvor nicht richtig definiert, was ich allerdings getan habe.
Schnacker
Schnacker 02.03.2007 um 21:09:38 Uhr
Goto Top
Kann mir das jemand erklären: Das Skript läuft bei fast allen Rechnern sauber durch. Nur bei einem wird statt "Buero-Daten" meistens (aber nicht immer) "daten auf server" (Yface-smile angezeigt. Das ist eben komischerweise nur manchmal der Fall. Habe mich codeseitig (allein schon aus Unkenntnis) eng an die Vorlage gehalten. Nur die Abfrage zum Schluß habe ich auskommentiert weil das auf Dauer nervt. Mache ich was falsch oder ist beim Rechner was nicht richtig?
Hier der Code:

' VBScript to map a network drive.  
' Authors Guy Thomas and Barry Maybury  
' Version 1.3 - January 23rd 2005  
' ----------------------------------------'  
'Option Explicit  
Dim objNetwork, strDrive, objShell, objUNC
Dim strRemotePath, strDriveLetter, strNewName
'  

strDriveLetter = "Y:"  
strRemotePath = "\\server\daten"  
strNewName = "Buero-Daten"  

' Section to map the network drive  
Set objNetwork = CreateObject("WScript.Network")  
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath

' Section which actually (re)names the Mapped Drive  
Set objShell = CreateObject("Shell.Application")  
objShell.NameSpace(strDriveLetter).Self.Name = strNewName

'Wscript.Echo "Check : "& strDriveLetter & " for " & strNewName  
WScript.Quit

' End of script.  
fritzo
fritzo 03.03.2007 um 12:19:54 Uhr
Goto Top
Hi,

eventuell funktioniert "objShell.NameSpace(strDriveLetter).Self.Name = strNewName" nicht, weil er mit MapNetworkDrive noch nicht durch ist. Versuch mal, vor dem Umbenennen eine Pause einzufügen --> "Wscript.Sleep 3000"

@Babu
Welche Version des WSH ist bei Dir installiert? 5.6?
Babu
Babu 06.03.2007 um 12:27:01 Uhr
Goto Top
Hi Fritzo,

hab das Problem anderweitig (mit einer Batch Datei und einigen Registry-Einträgen) gelöst. Ich hab in anderen Foren rausgefunden, daß es wohl an meiner WSH Version liegt. Leider weiß ich nicht wo ich das nachschauen kann. Wie gesagt, bin ein absoluter Laie. Betriebssystem ist Windows 2000 Professional, falls Dir das was nutzt.

Gruß
BaBu
fritzo
fritzo 06.03.2007 um 23:37:20 Uhr
Goto Top
W2K hat soweit ich weiß eine niedrigere Version. Du kannst Dir die Version ausgeben lassen - öffne mal mit "cmd.exe" eine Dosbox und gib da "cscript" ein und drück Return - in der folgenden Ausgabe sollte ganz oben die Versionsnummer des Windows Script Hosts genannt sein.

Hier kannst Du den WSH 5.6 downloaden, falls Du willst: Download WSH 5.6

Grüße,
fritzo
Babu
Babu 07.03.2007 um 07:06:33 Uhr
Goto Top
Hi Fritzo,

vielen Dank. Wieder was gelernt...........! Ich hab die Version 5.6 bereits. Das heißt Dein Script müsste, rein technisch gesehen, funktionieren oder?

Gruß
Babu
Schnacker
Schnacker 07.03.2007 um 22:51:36 Uhr
Goto Top
@fritzo:
Die Pause wars, ganz ans Ende vom Skript eingefügt, klappt es jetzt. Danke!

5min später:
Ha, zu früh gefreut! Wenn ich das Laufwerk (Bsp. X öffne und wieder schließe, ist wieder "Daten auf server... " zu lesen. Es ist doch zum Mäusemelken. Was kann das denn man bloß sein?
fritzo
fritzo 08.03.2007 um 19:23:55 Uhr
Goto Top
Hi Fritzo,

vielen Dank. Wieder was gelernt...........!
Ich hab die Version 5.6 bereits. Das
heißt Dein Script müsste, rein
technisch gesehen, funktionieren oder?
Gruß Babu

Rein technisch ja. Bei mir funktionierts. Wir werden aber wahrscheinlich so zuviel Zeit mit der Suche verschwenden. Manchmal ist es schlauer, einfach was alternatives zu versuchen. Versuch mal dieses Script; es ist einfacher und sollte daher besser funktionieren:
strDrive = "P:"   
strPath = "\\server\share"  
boolPersistent = True ' True = Persistent ; False = Not Persistent  
set objNetwork = WScript.CreateObject("WScript.Network")  
objNetwork.MapNetworkDrive strDrive, strPath, boolPersistent
WScript.Echo "Drive gemappt"  
fritzo
fritzo 08.03.2007 um 19:27:51 Uhr
Goto Top
Ha, zu früh gefreut! Wenn ich das
Laufwerk (Bsp. X öffne und wieder
schließe, ist wieder "Daten auf
server... " zu lesen. Es ist doch zum
Mäusemelken. Was kann das denn man
bloß sein?

@Schnacker
Wirklich keinen Plan; ich kriege es hier nicht nachgestellt.

Gruß
fritzo
fritzo
fritzo 08.03.2007 um 19:42:52 Uhr
Goto Top
Wegen des Umbenennens - habt ihr das Posting von gemini gelesen, das auf http://www.mcseboard.de/showthread.php?threadid=22357 verweist, wo erklärt ist, wie man die gemappten Drives mittels regkey umbenennt?
Babu
Babu 09.03.2007 um 08:29:02 Uhr
Goto Top
Ja hab ich gelesen. Hab das ganze in eine Batch-Datei gepackt. Diese wird bei mir per GPO verteilt. Funktioniert alles super!
Danke trotzdem für Deine Mühe mit dem neuen Skript. Wenn ich mal wieder Luft hab probier ich es aus.
Schnacker
Schnacker 09.03.2007 um 13:16:18 Uhr
Goto Top
Bei mir geht es nicht. Er vergißt die Einstellungen (auch wenn man sie bei Mountpoints2 manuell einträgt) nach kurzer Zeit und dann heißt es wieder "xxx auf Server". Da das aber mit dem Skript nix zu tun hat. werde ich mal mein Problem in einem neuen Fred anprangern.
Danke allen für die bereits geleistete Hilfe
konces
konces 29.12.2010 um 12:10:41 Uhr
Goto Top
hallo zusammen,

das scrpt von frizto ist genial, endlich kann ich meine netzlaufwerke umbenennen,
allerdings würde ich es gerne um weitere netzlaufwerke erweitern, da ich keine ahnung
habe von vbs wäre es super, wenn mir jemand sagen könnte, wie das script ausehen
sollte, des weiteren wäre es super, wenn man vorher abfragen würde, ob die
laufwerke vorhanden sind, und nur verbunden werden soll, wenn das netzlaufwerk
nicht existiert, macht ja sonst kein sinn. momentan sieht es so aus:
' NameDrive.vbs  
' VBScript to map a network drive.  
' Authors Guy Thomas and Barry Maybury  
' Version 1.3 - January 23rd 2005  
' ----------------------------------------'  
'  
Option Explicit
Dim objNetwork, strDrive, objShell, objUNC
Dim strRemotePath, strDriveLetter, strNewName
'  
strDriveLetter = "Z:"  
strRemotePath = "\\192.168.1.100\arbeit"  
strNewName = "ARBEIT"  

' Section to map the network drive  
Set objNetwork = CreateObject("WScript.Network")  
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath

' Section which actually (re)names the Mapped Drive  
Set objShell = CreateObject("Shell.Application")  
objShell.NameSpace(strDriveLetter).Self.Name = strNewName

Wscript.Echo "Check : "& strDriveLetter & " for " & strNewName  
WScript.Quit

' End of script.  
fritzo
fritzo 29.12.2010 um 15:57:58 Uhr
Goto Top
Hallo, hier fritzo.

Um mehrere Laufwerke anzubinden, könntest Du mehrere Scripts erstellen. Eleganter aber ist es, wenn man das alles in einem einzigen Script macht, und zwar so:

Als erstes lagern wir die Routine, mit der die Laufwerke angebunden werden, in eine Subroutine (Sub) aus und benennen diese "MapDrive".
Diese Subroutine füttern wir mit dem Laufwerksbuchstaben (drv) und dem Pfad (drvpath).
Im Hauptteil des Scripts brauchen wir nun nur noch die Subroutine aufrufen und jeweils das Laufwerk und den Pfad als Argument mitzugeben.

Unten das fertige Script - Du mußt nur noch die Daten für die Laufwerke entsprechend ändern, also diese Zeilen hier:
MapDrive "I:", "\\192.168.1.100\bilder", "Bilder"

Wenn Du mehr Laufwerke anbinden willst, füg eine weitere dieser Zeilen ein und ändere sie für Deine Belange um. Wenn Du weniger brauchst, lösch einfach die Zeilen, die Du nicht brauchst.

Ok, ich hoffe, Du kommst so zurecht - wenn nicht, meld Dich.

Viele Grüße,
fritzo

' MapDrives.vbs  
' by fritzo@stop1984.org in 12/2010  
' VBScript to map multiple network drives  
' enhancement of namedrive.vbs by Guy Thomas and Barry Maybury  
' ----------------------------------------'  

Option Explicit
Dim objNetwork, objShell,
Dim drv, drvpath, drvname

' Syntax is MapDrive "DriveLetter", "UNC-Path", "DriveName"  
MapDrive "H:", "\\192.168.1.100\arbeit", "Arbeit"  
MapDrive "I:", "\\192.168.1.100\bilder", "Bilder"  
MapDrive "J:", "\\192.168.1.100\mp3", "Musik"  
MapDrive "K:", "\\192.168.1.100\angeln", "DankeFuerDenFisch"  

' End of script.  
Wscript.Quit


Sub MapDrive (drv, drvpath, drvname)

	' Section to map the network drive  
	Set objNetwork = CreateObject("WScript.Network")  
	objNetwork.MapNetworkDrive drv, drvpath, asc (drvname) ' --> have to use asc to change drvname to ascii, otherwise you will get type conversion error  
	
	' Section which actually (re)names the Mapped Drive  
	Set objShell = CreateObject("Shell.Application")  
	objShell.NameSpace(drv).Self.Name = drvname

	Wscript.Echo "Check : "& drv & " for " & drvname  

	Set objNetwork = Nothing
	Set objShell = Nothing

End Sub

[Edit Biber] Ich finde es schöner mit Codeformatierung.[/Edit]
konces
konces 29.12.2010 um 21:02:56 Uhr
Goto Top
hallo fritzo,

erstmal vielen Dank für Deine schnelle Hilfe face-smile

ich habe jetzt mal Deinen Code getestet, allerdings erhalte ich noch
eine Fehlermeldung:

Skript: D:\test.vbs
Zeile: 8
Zeichen: 26
Fehler: Bezeichner erwartet
Code: 800A03F2
Quelle: Kompilierungsfehler in Microsoft VBScript.

Aber vielleicht sage ich Dir noch kurz was ich vorhab:

- prüfe zuerst ob folgende Netzlaufwerke vorhanden sind:

Laufwerk Z: \\192.168.1.100\arbeit
Laufwerk Y \\192.168.1.100\bilder

wenn ja, mache nichts. wenn nein, mappe bitte oben aufgeführten
netzlaufwerke, und benenne diese bitte um:

Z: ARBEIT
Y: BILDER
fritzo
fritzo 30.12.2010 um 16:53:18 Uhr
Goto Top
Hallo konces,

Fehler beseitigt (das Komma am Ende von Zeile 8 war zuviel) und die beiden von Dir genannten Laufwerke sind jetzt drin. Wenn die Laufwerke bereits vorhanden sind, passiert nichts; wenn sie nicht vorhanden sind, werden die Shares angebunden.

hf,
fritzo

' -------------------------------------------------------'  
' MapDrives.vbs  
' by fritzo@stop1984.org in 12/2010  
' VBScript to map multiple network drives  
' enhancement of namedrive.vbs by Guy Thomas and Barry Maybury  
' -------------------------------------------------------'  
Option Explicit
Dim objNetwork, objShell, objFile
Dim drv, drvpath, drvname

Set objNetwork = CreateObject("WScript.Network")  
Set objShell = CreateObject("Shell.Application")  
Set objFile = CreateObject("Scripting.FileSystemObject")	  

MapDrive "Z:", "\\192.168.1.100\arbeit", "Arbeit"  
MapDrive "Y:", "\\192.168.1.100\bilder", "Bilder"  

Set objNetwork = Nothing
Set objShell = Nothing
Set objFile = Nothing
Wscript.Quit

Sub MapDrive (drv, drvpath, drvname)
	If objFile.DriveExists(drv) Then
		WScript.Echo "Drive already exists"  
		Exit Sub
	Else
		objNetwork.MapNetworkDrive drv, drvpath, asc (drvname)
		objShell.NameSpace(drv).Self.Name = drvname
		Wscript.Echo "Check : "& drv & " for " & drvname  
	End If
End Sub
GT6VSBBBB
GT6VSBBBB 15.11.2011 um 16:19:14 Uhr
Goto Top
Hallo! Ich finde das Skript richtig praktisch, bei mir funktioniert alles bestens.
Leider kenne ich mich mit vbs nicht so gut aus, wäre es möglich eine PRÜFUNG einzubauen ala'

WENN SERVER ONLINE --> DANN MOUNTEN
WENN SERVER OFFLINE --> SKRIPT ABBRECHEN / NICHT MOUNTEN

Vielleicht kann jemand weiterhelfen? LG
fritzo
fritzo 30.01.2012 um 18:03:03 Uhr
Goto Top
Hallo,

da ich eine Anfrage von GWeidt erhalten habe mit der Bitte, seine Version des Mapping-Scripts so zu ändern, daß es zusätzlich
1. erst prüft ob das Netzwerk aktiv ist..
2. ob das Laufwerk bereits belegt ist..

... hier eine überarbeitete Version.

Bitte vor Einsatz in der Produktion testen, ich bin hier momentan an einem Standalone-Rechner.

Gruß,
fritzo


' +++++++++++++++++++++++++ schnipp +++++++++++++++++++++++++++

Option Explicit

' Variablen dimensionieren
DIM objNetwork, objShell
DIM strDrive, strRemotePath, strServer
DIM strNewName, colAllDrives
DIM i, AlreadyConnected
DIM objShellApp

' Variablen belegen
strDrive = "X:"
strServer = "Server"
strNewName = "sharename"
strRemotePath = "\\" & strServer & "\share"

' Objekte referenzieren
Set objNetwork = CreateObject("WScript.Network")
Set colAllDrives = objNetwork.EnumNetworkDrives()
Set objShellApp = CreateObject("Shell.Application")

' ###########################################################################
' ############### Loop: sind wir am Netz?
' ############### Wenn nein, 1000ms warten und erneut prüfen
' ###########################################################################
Do While Online (strServer) = False
WScript.Sleep 1000
Loop

' ###########################################################################
' ############### Prüfen, ob Laufwerk X: bereits belegt ist
' ###########################################################################
AlreadyConnected = False
For i = 0 To AllDrives.Count - 1 Step 2
If AllDrives.Item(i) = strDrive Then AlreadyConnected = True
Next

' ###########################################################################
' ############### AlreadyConnected = True = Laufwerk bereits belegt
' ###########################################################################
If AlreadyConnected = True Then
objNetwork.RemoveNetworkDrive strDrive ' diese beiden Zeilen auskommentieren
WScript.Sleep 2000 ' 2000ms Pause ' wenn nichts passieren soll
Else
' ###########################################################################
' ############### AlreadyConnected = False = Laufwerk bereits belegt
' ###########################################################################
objNetwork.MapNetworkDrive strDrive, strRemotePath, false, "Benutzername der Freigabe", "Passwort"
' 2000ms Pause
WScript.Sleep 2000
' Netzlaufwerk umbenennen
objShellApp.NameSpace(strDrive).Self.Name = strNewName
End if

' Objekte destruieren
Set objShell = Nothing
Set objNetwork = Nothing
Set objShellApp = Nothing

' Script Ende
WScript.Quit


' ######################################
' Funktionen
' ######################################

Function Online(strComputer)
DIM wmiQuery, objWMIService, objPing, objStatus
wmiQuery = "Select * From Win32_PingStatus Where Address = '" & strComputer & "'"

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set objPing = objWMIService.ExecQuery(wmiQuery)
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) Or objStatus.Statuscode<>0 Then
Online = False
Else
Online = True
End If
Next
End Function

' +++++++++++++++++++++++++ schnipp +++++++++++++++++++++++++++
fritzo
fritzo 30.01.2012 um 18:07:39 Uhr
Goto Top
Nachsatz: Ansonsten ein kleiner Tipp: steigt um auf MS PowerShell v2.0, wenn Ihr könnt.