ollipws
Goto Top

Net user per script aus txt oder csv für FTP

Hallo Allerseits,

ich muss auf einem FTP-Server IIS auf Win 2012 R2 per Script 500 x 100 User inkl. KW aus csv oder txt anlegen.
Ein Traum wäre ein Traum wenn gleichzeitig auch das User Verzeichnis im "D:\ftproot\" identisch angelegt werden würde.

Es soll sich um local User, keine Domäne User handeln.

Für eine schnelle Hilfe wäre ich absolut dankbar, vielen Dank vorab.

Gruß

Content-Key: 336070

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

Ausgedruckt am: 19.03.2024 um 02:03 Uhr

Mitglied: 132895
132895 25.04.2017 aktualisiert um 17:15:50 Uhr
Goto Top
Zitat von @OlliPWS:
Hallo Allerseits,
Hola
ich muss auf einem FTP-Server IIS auf Win 2012 R2 per Script 500 x 100 User inkl. KW aus csv oder txt anlegen.
for /?
Ein Traum wäre ein Traum wenn ...
... ja wenn da nicht der Traum wäre face-big-smile
gleichzeitig auch das User Verzeichnis im "D:\ftproot\" identisch angelegt werden würde.
md /?
und Berechtigungen icacls /?
Es soll sich um local User, keine Domäne User handeln.
net user /add /?
Für eine schnelle Hilfe wäre ich absolut dankbar, vielen Dank vorab.
Bitte.

Gruß
Mitglied: OlliPWS
OlliPWS 25.04.2017 um 17:14:51 Uhr
Goto Top
mit Net User ist klar, aber wie bekomme ich die txt oder csv mit den Daten angebunden, und wie muss die entsprechende Datei aussehen.
Aus /? geht das nicht hervor!!!

Thanks
Mitglied: 132895
132895 25.04.2017 aktualisiert um 17:19:55 Uhr
Goto Top
Aus /? geht das nicht hervor!!!
Doch wenn man sich die Mühe machen und es richtig lesen würde ...
for /f "delims=" %%a in (c:\datei.txt) do (  
    echo User: %%a
    Rem mach hier alles für den User ...
)
Mitglied: 132895
132895 25.04.2017 aktualisiert um 19:30:34 Uhr
Goto Top
Btw. wieso hast du das unter der Kategorie "Java" abgelegt?

Machs doch gleich per Powershell, bei dem folgenden einfachen Beispiel sollte die CSV so aussehen:
"Username";"Password"
"maxmuster01";"Passw0rd1"
"maxmuster02";"Passw0rd2"
"maxmuster03";"Passw0rd3"
# Variables ---
$ftproot = 'C:\inetpub\ftproot'  
$csv = 'C:\users.csv'  
# -------------
$users = Import-CSV $csv -Delimiter ";"  
$users | %{
    try{
        $userfolder = "$ftproot\$($_.Username)"   
        write-host "Creating user '$($_.Username)' and FTP-Home under '$userfolder'." -F Green  
        # add user
        net user $_.Username "$($_.Password)" /add | out-null  
        # create folder
        md $userfolder -Force | out-null
        # add acl to folder
        $acl = get-acl $userfolder
        $ace = New-Object System.Security.AccessControl.FileSystemAccessRule ($_.Username,"Modify","ContainerInherit,ObjectInherit","none","Allow")  
        $acl.SetAccessRule($ace)
        Set-ACL $userfolder $acl
    }catch{
        # something went wrong, tell the user
        write-host $_.Exception.Message -F Red
    }
}
Die Passwörter kann man natürlich bei Bedarf im Skript generieren und in die CSV zurückschreiben, da hat man freie Wahl was die Möglichkeiten angeht.
Mitglied: OlliPWS
OlliPWS 26.04.2017 um 09:44:25 Uhr
Goto Top
Danke schon mal vorab

jetzt habe ich diese Fehlermeldung, bin damit aber ein wenig überfordert:

PS C:\WINDOWS\system32> # Variables ---
$ftproot = 'D:\ftproot'
$csv = 'D:\ablage\users.csv'
  1. -------------
$users = Import-CSV $csv -Delimiter ";"
$users | %{
try
{
$userfolder = "$ftproot\$($_.Username)"
write-host "Creating user '$($_.Username)' and FTP-Home under '$userfolder'." -F Green
net user $_.Username "$($_.Password)" /add | out-null / sco
md $userfolder -Force | out-null
$acl = get-acl $userfolder
$ace = New-Object System.Security.AccessControl.FileSystemAccessRule ($_.Username, "Modify", "ContainerInherit,ObjectInherit", "none", "Allow")
$acl.SetAccessRule($ace)
Set-ACL $userfolder $acl
}
catch
{
write-host $_.Exception.Message -F Red
}
}
Creating user 'iea20170426-001' and FTP-Home under 'D:\ftproot\iea20170426-001'.
A positional parameter cannot be found that accepts argument '/'.
Creating user 'iea20170426-002' and FTP-Home under 'D:\ftproot\iea20170426-002'.
A positional parameter cannot be found that accepts argument '/'.
Creating user 'iea20170426-003' and FTP-Home under 'D:\ftproot\iea20170426-003'.
A positional parameter cannot be found that accepts argument '/'.
Creating user 'iea20170426-004' and FTP-Home under 'D:\ftproot\iea20170426-004'.
A positional parameter cannot be found that accepts argument '/'.
Creating user 'iea20170426-005' and FTP-Home under 'D:\ftproot\iea20170426-005'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.
Creating user '' and FTP-Home under 'D:\ftproot\'.
A positional parameter cannot be found that accepts argument '/'.

PS C:\WINDOWS\system32>
Mitglied: 132895
132895 26.04.2017 aktualisiert um 09:57:31 Uhr
Goto Top
Das gehört in ein Skript, nicht in die Konsole gepostet!

Und was soll das / sco ??
Das ist in meinem Skript nicht drin, ebenso wie diverse andere Änderungen von dir!!! Geht einwandfrei, und wurde getestet....

Pfeif dir erst mal die Powershell Grundlagen rein bevor du hier meckerst.
Mitglied: OlliPWS
OlliPWS 26.04.2017 um 10:19:05 Uhr
Goto Top
Danke, meinen Fehler habe ich gefunden, geht jetzt.
Noch eine kleine Randfrage; Müssen die Gänsefüßchen in der csv sein?
Wie kann ich die in Excel einfügen?
Mitglied: OlliPWS
OlliPWS 26.04.2017 um 10:21:15 Uhr
Goto Top
ich habe nicht gemeckert, schuldige.
bis dato hatte ich nie Powershell zu tun.

Es geht jetzt perfekt!!!! face-smile
Mitglied: 132895
Lösung 132895 26.04.2017 aktualisiert um 10:39:50 Uhr
Goto Top
Zitat von @OlliPWS:

Danke, meinen Fehler habe ich gefunden, geht jetzt.
Noch eine kleine Randfrage; Müssen die Gänsefüßchen in der csv sein?
Ja wenn du z.B. Passwörter mit einem Semikolon darin hast ! Weil das Semikolon schon der Spaltentrenner ist.
Wie kann ich die in Excel einfügen?
Brauchst du dich nicht drum kümmern das setzt Excel automatisch wenn Zeichen maskiert werden müssen.

Es geht jetzt perfekt!!!!
Na dann bitte noch nen Haken dran.
Mitglied: OlliPWS
OlliPWS 26.04.2017 um 16:21:27 Uhr
Goto Top
Jetzt habe ich doch noch ein Haar in der Suppe gefunden. UPPS

Der User wird nicht im FTP Authorization Rules eingetragen. Dieser hat also doch noch keine Zugriffsberechtigungen.

Es tut mir Leid.
Mitglied: 132895
132895 26.04.2017 aktualisiert um 16:31:09 Uhr
Goto Top
Naja ein Bisschen musst du schon noch selber machen, die Anforderung stand ja oben nicht face-wink. Das ist ja wohl das kleinste Problem ... ->AppCmd
Pack sie in eine Gruppe und gut is face-wink
Mitglied: OlliPWS
OlliPWS 26.04.2017 um 16:45:01 Uhr
Goto Top
Ich weis face-smile
Mitglied: OlliPWS
OlliPWS 27.04.2017 um 09:11:04 Uhr
Goto Top
Ich muss gestehen, dass tut mir echt Leid. Ich habe ein Brett vorm Kopf. Kannst Du mir auf die Sprünge helfen bezüglich AppCmd?
Bin Blond, außerdem mache ich das nur nebenher für unseren Verein, wollte jetzt nur der vielen händischen Einträge aus dem Weg gehen. Habe ansonsten nichts mit Scripten und so zutun.
Mitglied: 132895
132895 27.04.2017 aktualisiert um 11:34:28 Uhr
Goto Top
Mitglied: 132895
132895 27.04.2017 aktualisiert um 14:18:22 Uhr
Goto Top
Falls du immer noch nicht auf den Trichter gekommen bist ...
# Variables ---
$ftproot = 'C:\inetpub\ftproot'  
$csv = 'C:\users.csv'  
$group = 'myftpusers'  
$ftpsitename = 'Demo-FTP'  
# -------------
# Import userlist
$users = Import-CSV $csv -Delimiter ";"  

# create local group for ftp users
net localgroup $group /add | out-null

# add group to ftp site's authorization rules with read write access 
."$env:SystemRoot\system32\inetsrv\appcmd.exe" set config "$ftpsitename" "-section:system.ftpServer/security/authorization" "/+`"[accessType='Allow',roles='$group',permissions='Read,Write']`"" /commit:apphost  

$users | %{
    try{
        $userfolder = "$ftproot\$($_.Username)"   
        write-host "Creating user '$($_.Username)' and FTP-Home under '$userfolder'." -F Green  
        # add user
        net user $_.Username "$($_.Password)" /add | out-null  
        # add user to ftp group
        net localgroup $group $_.Username /add | out-null
        # create folder
        md $userfolder -Force | out-null
        # add acl to folder
        $acl = get-acl $userfolder
        $ace = New-Object System.Security.AccessControl.FileSystemAccessRule ($_.Username,"Modify","ContainerInherit,ObjectInherit","none","Allow")  
        $acl.SetAccessRule($ace)
        Set-ACL $userfolder $acl
    }catch{
        # something went wrong, tell the user
        write-host $_.Exception.Message -F Red
    }
}
und Tschüss.

Gruß