Das Backslash richtig setzten.

Marco26

Cadet 3rd Year
Registriert
Sep. 2016
Beiträge
37
Morgen zusammen

Bin grad dabei ein Programm zu erstellen das Shares, Unterordner und AD Gruppen mi Vollzugriff auf diese erstellt.
Jetzt hab ich grad ein kleines Problem was die richtige "Schreibweise" angeht.
Er frägt nach und nach das Laufwerk $textfieldpath, dann denn Namen des späteren Share Ordners ($textfieldname).

Jetzt bin ich bei dem Punkt an dem der Unterordner abgefragt wurde und erstellt werden soll. Unterordner.PNG

Im Grunde muss ich es ja so setzten wenn ich den Pfad angeben will. -Path $textfieldpath.text$thextfieldname.text\
Das Backslash brauche ich erst beim namen da das beim $textfieldpath schon mit eingegeben wird.

Jedenfalls hat er bisher immer Probleme und erstellt den Unterordner nicht da der Pfad nicht korrekt angegeben wird.
Klar verstehe ja auch wo das Problem liegt^^ Kann mir einer von euch die Korrekte Schreibweise sagen ?

Danke im voraus ^^
 
Du musst soweit ich weiß doppelt slash verwenden "\"

Edit: Scheint wohl laut Yuuri nicht zu stimmen, dann bitte ignorieren :)
 
Zuletzt bearbeitet:
Such mal danach, wie man Strings korrekt verbindet - Stichwort "concatenation"/"verketten".

@ dominic.e: Escape Character in PowerShell ist der Backtick `.
 
Yuuri schrieb:
@ dominic.e: Escape Character in PowerShell ist der Backtick `.

​Dann will ich mal nichts gesagt haben ;) Danke für die Aufklärung :daumen:
 
Jetzt habe ich mich mal schlau gemacht und so sollte es eigentlich stimmen:

Unterordner 2.PNG

Jetzt hab ich ne neue Fehlermeldung :D

Fehler.PNG

Sharename heißt hier der Shareordner in dem der Unterordner erstellt werden soll. Dieser wurde davor erstellt. (er existiert auf jeden fall das hab ich nachgeprüft.
Liegt es womöglich immer noch an einer falschen \ Setzung ?

Es sollte jetzt eigentlich lauten:
New-Item -Path E:\ + Sharename + "" -Name Unterordner -itemtype directory
ohne + also: E:\Sharename\
 
Kannst du mal den kompletten Code hier posten? Das wird mir sonst zu sehr Rätselraten hier..
Aber ich vermute du wirst noch die ein oder anderen "" benötigen.

Und Schreib mal bitte dazu, was in den Variablen stehen soll..

Code:
$textfieldpath = "C:"
$textfieldname = "Temp"
$newpath = $textfieldpath+"\"+$textfieldname+"\"
New-Item -Path $newpath -Name "Test" -ItemType Directory -WhatIf

Gib dem Ordner in dem der neue Unterordner erstellt werden mal eine eigene Variable , dann funktioniert es bei mir, mit oben stehendem Code einwandfrei.
Anscheinend kommt das CMDLet mit dem String sonst nicht klar.
 
Zuletzt bearbeitet:
Ich vermute ja, dass es ein Copy-Item -Force auch regeln würde :>. //edit: Quatsch, nicht wenn er nur Ordner mit Zugriffsrechten anlegen will.

Tipp: Setz Sachen in Klammern, die zusammengehören. Also z.B. die zwei Variablen, die zu concatenaten willst.
 
Code:
#Form 
$form = New-Object Windows.Forms.Form

#Überschrift
$form.text = "Share"

#Label erstellen und Text Größe etc anpassen
$label = New-Object Windows.Forms.Label
$label.Location = New-Object Drawing.Point 50,30
$label.Size = New-Object Drawing.Point 200,15
$label.text = "Pfad"

#Textbar
$textfieldPath= New-Object Windows.Forms.TextBox
$textfieldPath.Location = New-Object Drawing.point 50,60
$textfieldPath.Size = New-Object Drawing.Point 200,30
$textfieldPath.Text = "E:\" "#Hier steht später nichts, hab es nur auf E:\ damit die Testläufe schneller gehen.

#Textknopf
$buttonOK1 = New-Object Windows.Forms.button
$buttonOK1.Location = New-Object Drawing.Point 100,200
$buttonOK1.Text = "OK"
#Ändert den Text, entfernt und deaktiviert das Textfeld und den Knopf
$buttonOK1.add_click({   

$label.Text = "Geben Sie den Sharenamen ein"

$form.Controls.Remove($textfieldpath)
$form.Controls.Remove($buttonOK1)



})

#Gibt Kontrolle, aktivierung
$form.Controls.Add($buttonOK1)
$form.Controls.Add($label)
$form.Controls.Add($textfieldPath)
$form.Controls.Add($buttonOK2)
$form.Controls.Add($textfieldName)
$form.Controls.Add($textfieldUnterordner)
$form.Controls.Add($buttonOK3)

$form.ShowDialog()

#Textbar
$textfieldName= New-Object Windows.Forms.TextBox
$textfieldName.Location = New-Object Drawing.point 50,60
$textfieldName.Size = New-Object Drawing.Point 200,30
$textfieldName.Text = "Sharename"

#Textknopf
$buttonOK2 = New-Object Windows.Forms.button
$buttonOK2.Location = New-Object Drawing.Point 100,200
$buttonOK2.Text = "OK"
#'Ändert den Text, entfernt und deaktiviert das Textfeld und den Knopf, erstellt den Share
$buttonOK2.add_click({

$label.Text = "Wie soll der Unterordner heißen"

New-Item -Name $textfieldName.text -ItemType directory -Path $textfieldpath.text

$form.Controls.Remove($textfieldName)
$form.Controls.Remove($buttonOK2)



})

#Textbar
$textfieldUnterordner= New-Object Windows.Forms.TextBox
$textfieldUnterordner.Location = New-Object Drawing.point 50,60
$textfieldUnterordner.Size = New-Object Drawing.Point 200,30
$textfieldUnterordner.Text = "Unterordner"

#Textknopf
$buttonOK3 = New-Object Windows.Forms.button
$buttonOK3.Location = New-Object Drawing.Point 100,200
$buttonOK3.Text = "OK"
#'Ändert den Text, entfernt und deaktiviert das Textfeld und den Knopf, erstellt den Share
$buttonOK3.add_click({

$label.Text = "Share wurde erstellt"

#Erstellt den Unterordner
New-Item -Path $textfieldPath.Text + $textfieldName.text + "\"   -Name $textfieldUnterordner.Text -ItemType directory

#Erstellt die ADGruppe die später zugriff auf den Unterordner bekommt. Name lautet immer "grp_Share_"Name des Unterordners"
#New-ADGroup -GroupScope Global -Name grp_share_$textfieldUnterordner.text -Description Zugriffsgruppe für den Ordner $textfieldunterordner.text im Share $textfieldname

$form.Controls.Remove($textfieldUnterordner)
$form.Controls.Remove($buttonOK3)



})

Vorab tuts mir leid wenn die Umsetzung vielleicht unnötig Kompliziert oder so ist ^^ Ich bin ein relativer Anfänger und bin grad noch in der Learning by Doing Phase ^^

Ab dem Punkt wo er die Unterordner erstellt hab ich aufgehört weil AD Gruppe zu erstellen macht logischerweise erst dann Sinn wenn auch der Ordner für die Gruppe da ist ^^ Danach wird noch ein bisschen die Sicherheit vom Ordner bearbeitet. (Vererbung, Benutzer,zugriff raus und son kram)
 
Zuletzt bearbeitet:
Jap, der Ausdruck muss noch in Klammern. Aus deinem gewünschten
Code:
(New-Item -Path (<string1> + <string2>) -Name <string>)
wird sonst ein
Code:
(((New-Item -Path <string>) + <string2>) -Name <string>)

Einfacher wäre es aber, wenn du den Namen des Unterordners einfach in dem Parameter Path übergeben würdest (+ das richtige Cmdlet um Pfade zu verbinden).
Code:
New-Item -Path (Join-Path (Join-Path <string1> <string2>) <Name des Unterordners>) -ItemType Directory

Noch einfacher wäre es den üblichen Alias zu verwenden.
Code:
mkdir (Join-Path (Join-Path <string1> <string2>) <Name des Unterordners>)

Da ist ein
Code:
Get-Alias
hilfreich, damit du nicht immer alles ausschreiben musst.
 
join-path und alias werd ich mir die nächste zeit dann mal genauer anschauen ^^ Scheinen ja sehr nützlich zu sein :D
Ergänzung ()

Code:
(New-Item -Path (<string1> + <string2>) -Name <string>)

So jetzt hab ich ne neue Fehlermeldung ^^

Fehler 2.PNG

Also ich hatte echt noch nie so ein Problem bei sowas eigentlich einfangen wie einem Befehl der Ordner erstellt ^^
Ergänzung ()

So sieht es jetzt

Unbenannt.PNG
 
Code:
$textfieldpath = "C:"
2.$textfieldname = "Temp"
3.$newpath = $textfieldpath+"\"+$textfieldname+"\"
4.New-Item -Path $newpath -Name "Test" -ItemType Directory -WhatIf

Hast du es so mal probiert? Das Ganze Join-Path brauchst du IMHO gar nicht.
Aber natürlich gut, wenn man es kennt :-)
In deinem Fall kannst du den ersten "" auch weglassen, da es bei dir schon in der Variable steht.
 
Hab mittlerweile noch ein weiteres Problem bei der Beschreibung der AD Gruppe
so ist der Code
Code:
#Erstellt die ADGruppe die später zugriff auf den Unterordner bekommt. Name lautet immer "grp_Share_"Name des Unterordners"
New-ADGroup -GroupScope Global -Name ("grp_Share_" + $Combobox.text) -Description ("Zugriffsgruppe für den Ordner" + $Combobox.Text + "im Share" + $textfieldName.Text)

und das kommt dabei raus wenn ich bsp. Buchhaltung auswähle
AD Gruppe ergebniss.PNG

beim erstellen der gruppe setzt er ja auch das Wort Buchhaltung ein sonst hieße die Gruppe ja nicht so. Wo ist das Problem bei der Beschreibung ?
Ergänzung ()

Ok mittlerweile bennent er sie richtig aber die Leerzeichen werden nicht gesetzt ^^
Unbenannt.PNG
 
Naja, du hast in deinem Code ja auch keine Leerzeichen in den Strings.
Richtig wäre so:
Code:
New-ADGroup -GroupScope Global -Name ("grp_Share_" + $Combobox.text) -Description ("Zugriffsgruppe für den Ordner " + $Combobox.Text + " im Share " + $textfieldName.Text

In Powershell kann man Strings aber auch einfach so formatieren:
Code:
New-ADGroup -GroupScope Global -Name "grp_Share_$($Combobox.text)" -Description "Zugriffsgruppe für den Ordner $($Combobox.Text) im Share $($textfieldName.Text)"
Mit $() sagst du Powershell, dass es den Kram innerhalb der Klammern nicht als Text behandeln, sondern interpretieren soll (z.B. als Variable oder als Befehl).
 
Zurück
Oben