tommesy
Goto Top

Ordner mit Vollzugriff Jeder erstellen bzw. Freigeben

Hallo
habe mich gerade hier neu angemeldet. Weil ich hier schon viele Info´s bekommen habe. Erstmal liebe Grüße an alle.
Nun meine Frage, ich habe eine VBS Datei geschrieben um einen Ordner auf einem wählbaren Laufwerk zu erstellen, den ich auch freigeben kann.
Das Funktioniert auch super. Was ich nur nicht hinbekomme ist der Vollzugriff für "jeder". Ich brauche das für einen Scanner der in den Ordner hineinscannt.
Geht das überhaupt? Mit Net Share unter cmd klappt das mit einer Befehlszeile. Da das ganze ein Teil von einem Menue ist würde ich es gerne komplett in VBS lösen


lw = InputBox("Laufwerks Buchstaben eingeben: " &VbCRLF&VbCRLF&_
"BITTE NUR DEN BUCHSTABEN EINGEBEN OHNE :\"&VbCRLF&VbCRLF&_
"z.B.: c oder d" , "Ziel eingeben")
ordner = InputBox("Ordner Name eingeben: " &VbCRLF&VbCRLF&_
"z.B.: Toshiba-Scan" , "Ordnername")

Dim objFSO, newDIR
ziel= lw & ":\"& ordner
Set objFSO = CreateObject("Scripting.FileSystemObject")
if objFSO.Folderexists(ziel) = false then
Set newDIR = objFSO.CreateFolder(ziel)
end if
msgbox lw & ":\"& ordner

Const FILE_SHARE = 0
Const MAXIMUM_CONNECTIONS = 25
strComputer = "."
strOrdner = ziel
'strOrdner = "c:\OrdnerName"
'strFreigabe = "OrdnerName"
strFreigabe = Ordner
' strBeschreibung = "Scan-Ordner" 'Kommentar der Freigabe hinzufügen

Set oWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"_
& strComputer & "\root\cimv2")

Set oFreigabe = oWMIService.Get("Win32_Share")

err = oFreigabe.Create _
(strOrdner, strFreigabe, FILE_SHARE, MAXIMUM_CONNECTIONS, strBeschreibung)
'set objTrustee = objWMIService.Get("Win32_Trustee").SpawnInstance_
'objTrustee.Name = "Jeder"

Wscript.Echo "Fehlernummer: " & err

Für eine Hilfe wäre ich sehr dankbar und würde mich freuen ein Antwort zu bekommen.

LG
Thomas

PS.:sollte auf Win7,Win8 und Win10 laufen wenn geht.

Content-ID: 357788

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

Ausgedruckt am: 23.11.2024 um 12:11 Uhr

Tektronix
Tektronix 12.12.2017 um 08:31:31 Uhr
Goto Top
Hallo,
wenn Du Dir das Prog runterlädst, und aus Deinem Script aufrufst kannst Du Berechtigungen setzen.
setacl
Tommesy
Tommesy 12.12.2017 um 15:41:57 Uhr
Goto Top
Das Programm ist nicht die Lösung.
Da ich Kopierer ausliefer und die Netzwerkanbindung dafür mache, muss ich das bei Kunden PC´s machen. Deswegen dachte ich es automatisch über VSB zu machen. Ist immer die gleiche Berechtigung auf lokalen PC die nicht in einer Domäne sind.
Evtl. noch einen Lösungsvorschlag??

Wäre Super wenn es geht. Vielen Dank schon mal
LG
Thomas
Tektronix
Tektronix 12.12.2017 um 16:15:56 Uhr
Goto Top
Hallo,
schau Dir das mal an ist kein vbs aber batch.
Freigabe
colinardo
Lösung colinardo 12.12.2017 aktualisiert um 17:02:35 Uhr
Goto Top
Servus Thomas,
Wäre Super wenn es geht. Vielen Dank schon mal
Klar das ist absolut kein Problem muss man sich eben nur etwas in die Materie einfuchsen face-wink. Als reines VBS (ohne den Umweg über Run-Methode und net share) sieht das Erstellen eines Shares inkl. Berechtigung von Jeder (SID: S-1-1-0) auf Vollzugriff so aus:
Variablen im Kopf bitte anpassen
' Name der Freigabe  
Const SHARENAME = "MeineFreigabe"  
' Pfad der Freigabe  
Const SHAREPATH = "D:\Testordner"  
' Beschreibung der Freigabe  
Const SHAREDESCRIPTION = "Testfreigabe"  
' SID des Accounts / S-1-1-0 = Jeder  
Const SHARETRUSTEE = "S-1-1-0"  
' Zugriffs-Berechtigung  
Const SHAREACCESSMASK = 2032127
'==============================  
'Objekte erstellen  
Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")  
Set objSecClass = objWMI.Get("Win32_SecurityDescriptor")  
Set objSecDesc = objSecClass.SpawnInstance_()
Set refAccount = objWMI.Get("Win32_SID='" & SHARETRUSTEE & "'")  

' Create Trustee Object  
Set objTrustee = objWMI.Get("Win32_Trustee").SpawnInstance_()  
With objTrustee
	.Domain = refAccount.ReferencedDomainName
	.Name = refAccount.AccountName
	.SID = refAccount.BinaryRepresentation
	.SidLength = refAccount.SidLength
	.SIDString = refAccount.SID
End With
' Create ACE  
Set objACE = objWMI.Get("Win32_ACE").SpawnInstance_()  
With objACE.Properties_
	.Item("AccessMask") = SHAREACCESSMASK  
	.Item("AceFlags") = 3  
	.Item("AceType") = 0  
	.Item("Trustee") = objTrustee  
End With
'ACE in den SecurityDescriptor setzen  
objSecDesc.Properties_.Item("DACL") = Array(objACE)  

'Share erstellen  
Set objShare = objWMI.Get("Win32_Share")  
Set params = objShare.Methods_("Create").InParameters.SpawnInstance_()  
With params.Properties_
	.Item("Access") = objSecDesc  
	.Item("Name") = SHARENAME  
	.Item("Description") = SHAREDESCRIPTION  
	.Item("Path") = SHAREPATH  
	.Item("Type") = 0  
End With

' Share erstellen  
Set result = objShare.ExecMethod_("Create", params)  
If result.returnValue <> 0 Then
	wscript.echo("Fehler beim Erstellen des Shares, return Code:" & result.returnValue)  
Else
	wscript.echo("Share wurde erfolgreich erstellt!")  
End If
Grüße Uwe
Tektronix
Tektronix 12.12.2017 um 16:53:02 Uhr
Goto Top
Freigabe und Freigabeberechtigung.
In dem Beispiel ist der Ordner Ordner auf Laufwerk F: schon vorhanden.
net share Ordner=f:\Ordner /GRANT:Jeder,FULL
Tommesy
Tommesy 13.12.2017 um 20:28:22 Uhr
Goto Top
Hallo
vielen vielen Dank an colinardo. Hab Dein Script getestet und mit meinem ersten Script "verbunden" läuft super. Genauso wollte ich das habe.
Tausend Dank dafür. Ich hatte mich erst nicht getraut zu Fragen aber es hat sich echt gelohnt. Nochmals tausend Dank ....freu.....hüpf
LG
Thomas
Tommesy
Tommesy 21.12.2017 um 19:52:18 Uhr
Goto Top
Hallo
hier mal mein fertiges Script. Es fragt nach dem Laufwerk und dem Ordnernamen, und legt auf wunsch eine Verknüpfung auf den Desktop.
Zum Schluss wird noch die Freigabe in einer Text Datei angezeigt. Nochmals vielen Dank.
Wer es mal brauchen kann.....

lw = InputBox("Laufwerks Buchstaben eingeben: " &VbCRLF&VbCRLF&_  
"BITTE NUR DEN BUCHSTABEN EINGEBEN OHNE :\"&VbCRLF&VbCRLF&_  
"z.B.: c oder d" , "Ziel eingeben")  
ordner = InputBox("Ordner Name eingeben: " &VbCRLF&VbCRLF&_  
"z.B.: Toshiba-Scan" , "Ordnername")  


Dim objFSO, newDIR 
ziel= lw & ":\"& ordner   
Set objFSO = CreateObject("Scripting.FileSystemObject")     
if objFSO.Folderexists(ziel) = false then 
Set newDIR = objFSO.CreateFolder(ziel)
Else msgbox "Ordner existiert schon" ,0,"Achtung"   
end if

'###  [content:357788] ###  
'################################### Freigabe mit Vollzugriff Berechtigung ##########################  
' Name der Freigabe  
SHARENAME = ordner
' Pfad der Freigabe  
SHAREPATH = ziel
' Beschreibung der Freigabe  
Const SHAREDESCRIPTION = "Scan Ordner bzw. Freigabe"  
' SID des Accounts / S-1-1-0 = Jeder  
Const SHARETRUSTEE = "S-1-1-0"  
' Zugriffs-Berechtigung  
Const SHAREACCESSMASK = 2032127
'==============================  
'Objekte erstellen  
Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")  
Set objSecClass = objWMI.Get("Win32_SecurityDescriptor")  
Set objSecDesc = objSecClass.SpawnInstance_()
Set refAccount = objWMI.Get("Win32_SID='" & SHARETRUSTEE & "'")  

' Create Trustee Object  
Set objTrustee = objWMI.Get("Win32_Trustee").SpawnInstance_()  
With objTrustee
	.Domain = refAccount.ReferencedDomainName
	.Name = refAccount.AccountName
	.SID = refAccount.BinaryRepresentation
	.SidLength = refAccount.SidLength
	.SIDString = refAccount.SID
End With
' Create ACE  
Set objACE = objWMI.Get("Win32_ACE").SpawnInstance_()  
With objACE.Properties_
	.Item("AccessMask") = SHAREACCESSMASK  
	.Item("AceFlags") = 3  
	.Item("AceType") = 0  
	.Item("Trustee") = objTrustee  
End With
'ACE in den SecurityDescriptor setzen  
objSecDesc.Properties_.Item("DACL") = Array(objACE)  

'Share erstellen  
Set objShare = objWMI.Get("Win32_Share")  
Set params = objShare.Methods_("Create").InParameters.SpawnInstance_()  
With params.Properties_
	.Item("Access") = objSecDesc  
	.Item("Name") = SHARENAME  
	.Item("Description") = SHAREDESCRIPTION  
	.Item("Path") = SHAREPATH  
	.Item("Type") = 0  
End With

' Share erstellen  
Set result = objShare.ExecMethod_("Create", params)  
If result.returnValue <> 0 Then
	wscript.echo("Fehler beim Erstellen des Shares, return Code:" & result.returnValue)  
Else
	wscript.echo("Share wurde erfolgreich erstellt!")  
End If

'############################################################## Verknüpfung  ##################  

If MsgBox("Verknüpfung auf dem Desktop erstellen?", vbOKCancel, "Achtung") = vbOK Then  
                          '    für den Abbrechen Button  

 Set wshShell = CreateObject("WScript.Shell")  
 Set fso = CreateObject("Scripting.FileSystemObject")  
 Set args = WScript.Arguments
 

 ziel = fso.GetAbsolutePathName(ziel)
 idxName = InStrRev(ziel, "\")  

 idxExt = InStrRev(ziel, ".")  
 If idxExt < idxName Then idxExt = Len(ziel) + 1
 ordner = Left(ziel, idxName - 1)
 linkName = Mid(ziel, idxName + 1, idxExt - idxName - 1)
 desktop = wshShell.SpecialFolders("Desktop")  
 
 Set link = wshShell.CreateShortcut(desktop & "\" & linkName & ".lnk")  
 link.TargetPath = ziel
 link.WorkingDirectory = ordner
 link.Save
Else
End if


'############################################################## Ausgabe Text Datei  ###########  

'################## Computer Name  
 Set wshNetwork = CreateObject( "WScript.Network" )   
    strComputerName = wshNetwork.ComputerName 

'################## Computer IP  
'Dim sComputer, sStdOut, sIP   
    With CreateObject("WScript.Shell")   
        sComputer = .Environment("Process").Item("Computername")   
        sStdOut = .Exec("Ping -n 1 -4 " & sComputer).StdOut.ReadAll   
    End With 
    If InStr(sStdOut, "[") > 0 Then   
        sIP = Split(Split(sStdOut, "[", 2)(1), "]")(0)  
    Else 
        sIP = "Nothing"   
    End If 

' ########### Text Datei Schreiben  
Dim Dateisystem, Textdatei, Text
Set Dateisystem = CreateObject("Scripting.FileSystemObject")  
Set Textdatei = Dateisystem.CreateTextFile("\service-tool\64bit\Freigab.txt")  
Textdatei.Write "Kann Kopiert werden" & vbCrLf & "für  Weiterverarbeitung"_  
& vbCrLf & " " & vbCrLf & vbCrLf & "\\" & strComputerName & "\" & SHARENAME _  
& vbCrLf & vbCrLf & " oder " _   
& vbCrLf & vbCrLf & "\\" & sIP & "\" & SHARENAME  
Textdatei.Close

' ############## Text Datei Lesen  
Set Dateisystem = CreateObject("Scripting.FileSystemObject")  
Set Textdatei = Dateisystem.OpenTextFile("\service-tool\64bit\Freigab.txt")  
Text = Textdatei.ReadAll

Set WshShell = CreateObject("WScript.Shell")  
     WshShell.Run "\service-tool\64bit\Freigab.txt"    

     Set WshShell = CreateObject("WScript.Shell")                   
     WScript.Quit

Thomas
hille13
hille13 14.01.2023 um 18:20:51 Uhr
Goto Top
Hallo Thomas,
ich weiß das dieser Beitrag schon älter ist und hoffe, dass Du mir trotzdem meine Frage beantworten kannst. Ich installiere auch Kopierer bei Kunden und das Script kommt mir natürlich sehr gelegen.
Leider bekomme ich nach Ordner Vergabe, den Fehler „Fehler beim Erstellen des Shares, Return Code2“ kannst Du mir erklären was dieser Fehler bedeutet?

Grüße Jens
5175293307
5175293307 14.01.2023 aktualisiert um 18:43:38 Uhr
Goto Top
Zitat von @hille13:

Hallo Thomas,
ich weiß das dieser Beitrag schon älter ist und hoffe, dass Du mir trotzdem meine Frage beantworten kannst. Ich installiere auch Kopierer bei Kunden und das Script kommt mir natürlich sehr gelegen.
Leider bekomme ich nach Ordner Vergabe, den Fehler „Fehler beim Erstellen des Shares, Return Code2“ kannst Du mir erklären was dieser Fehler bedeutet?

Grüße Jens

Code 2 bedeutet "Access Denied", das Script läuft bei dir also mit zu wenig Rechten und das Share zu erstellen, guckst du

Access denied (2)
https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/create-meth ...

Remarks

Only members of the Administrators or Account Operators local group or those with Communication, Print, or Server operator group membership can successfully execute Create. The Print operator can only add printer queues. The Communication operator can only add communication device queues

Gruß wurstel
hille13
hille13 14.01.2023 um 18:59:49 Uhr
Goto Top
Hallo Wurstel,
das verstehe ich nicht. Ich habe auf meinem Rechner alle Zugriffsrechte und für das Script auch.

Grüße
5175293307
5175293307 14.01.2023 um 21:46:24 Uhr
Goto Top
Zitat von @hille13:
das verstehe ich nicht. Ich habe auf meinem Rechner alle Zugriffsrechte und für das Script auch.
Dann wohl nicht "elevated" ausgeführt.