2016-04-14 13 views
0

Ich stoße auf ein kleines Problem, bei dem der Benutzer keinen umgekehrten Schrägstrich "\" in den Ordnernamen eingeben muss, weil er den Servernamen löscht, wenn ich $ Server und $ kombiniere Elternteil ... Wie verhindere ich das? Ich würde eher nicht meinen Benutzer davon abhalten, diesen Backslash hinzuzufügen ...So verhindern Sie, dass Wörter entfernt werden

Außerdem habe ich versucht zu verhindern, dass c :, d :, e :, etc. Laufwerke in $ Parent verwendet werden, aber auch wenn Ich benutze -in oder -contains es erlaubt immer noch die c: \ xxxx oder d: \ xxxx eingegeben werden. Wie verhindere ich das?

# File share server name 
$Server = Read-Host -prompt "Verify Server Server Name (ie ECCOFS01)" 
If ([string]::IsNullOrWhiteSpace($Server)) { 
    Write-Host "You entered $Server which is an incorrect value: This Script is now Exiting." -Foreground "White" -Background "Red" 
    Exit 
    } 
else { 
    Write-Host "You Entered $Server" -Foreground "Black" -Background "Yellow" 
    } 

    # Parent folder setup 
$Parent = Read-Host -prompt "Enter full parent path that will contain the new folder(ie. Groups\ECCO IT) - Do NOT start with \. Please use correct spelling and capitalization (ie. Parent Folder Name). " 
If ([string]::IsNullOrWhiteSpace($Parent) -or ($Parent -eq "c:") -or ($Parent -eq "d:")) { 
    Write-Host "You entered $Parent which is an incorrect value: This Script is now Exiting." -Foreground "White" -Background "Red" 
    Exit 
    } 
else { 
    Write-Host "You Entered $Parent" -Foreground "Black" -Background "Yellow" 
    } 

$ServerParentShare = "\\"+[IO.Path]::Combine($Server,$Parent) 

    # New Folder Name 
$Name = Read-Host -prompt "Enter New Folder Name. Please use correct spelling and capitalization (ie. New Test Folder)" 
If ([string]::IsNullOrWhiteSpace($Name)) { 
    Write-Host "You entered $Name which is an incorrect value: This Script is now Exiting." -Foreground "White" -Background "Red" 
    Exit 
    } 
else { 
    Write-Host "You Entered $Name." -Foreground "Black" -Background "Yellow" 
    } 

$Path = [IO.Path]::Combine($ServerParentShare,$Name) 
    Write-Host = "New Folder Path = $Path" -Foreground "Black" -Background "Yellow" 

    # Choose parent OU 
$Country = Read-Host -prompt "Enter the Country OU that the Security Group will reside in (i.e. Global, Americas, Europe, Asia Pacific)" 
If ([string]::IsNullOrWhiteSpace($Country)) { 
    Write-Host "You entered $Country which is an incorrect value: This Script is now Exiting." -Foreground "White" -Background "Red" 
    Exit 
    } 
else { 
    Write-Host "---------------------VERIFY ENTRY---------------------" -Foreground "Black" -Background "Yellow" 
    Write-Host "OU = $Country, New share location = $Path" -Foreground "Black" -Background "Yellow" 
    } 


    # Option to continue or cancel the script 
$Continue = Read-Host -prompt "Does this look correct? Y or N?" 
If (($Continue -eq "N") -or ($Continue -eq "No")) { 
    Write-Host "Please Start over. This Script is now Exiting." -Foreground "White" -Background "Red" 
    Exit 
    } 
else { 
    Write-Host "Make sure to verify all folders and and AD Groups once complete." -Foreground "Yellow" -Background "Black" 
    } 
+0

Ich habe eigentlich zwei Fragen oben gefragt. Der Link, den du mir gegeben hast, hatte nur die Antwort für 1 von ihnen und nicht für beide. Soll ich die erste Frage entfernen und die zweite verlassen? –

Antwort

1

Ich habe den Benutzer benötigen kein Backslash setzen "\" in den Ordnernamen

Einsatz dieser Zeile nach Zeile 12:

$parent = $parent -replace '^\\','' 

wenn $ parent Enthält an Position 0 einen umgekehrten Schrägstrich, wird es durch eine leere Zeichenfolge ersetzt. wenn nicht, hat es keine Wirkung.

PS C:\> '\a\b' -replace '^\\','' 
a\b 
PS C:\> 'a\b' -replace '^\\','' 
a\b 
PS C:\> 

technisch bedeutet dies den Benutzer nicht daran hindern, einen umgekehrten Schrägstrich in den Ordnernamen setzen, aber wenn er/sie tut, wird es zu entfernen, die eine ähnliche Wirkung hat.

Ich habe versucht, c zu verhindern :, D :, E :, usw. Laufwerke von in $ Elternteil verwendet wird, aber selbst wenn ich -in oder -enthält es immer noch erlaubt

-in und -contains arbeiten mit Sammlungen, nicht mit einem einzelnen Objekt (wie $ parent). Für $ parent möchten Sie wahrscheinlich -like oder -match verwenden. Sie können, wie dies für einen Laufwerksbuchstaben formatierten Pfad überprüfen:

($parent -like '?:*') 

oder Sie können

($parent -like '*:*') 

Sie können für einen Doppelpunkt im Pfad nur schauen entweder dieser conditionals in einer while-Schleife verwenden, Erzwingt, dass der Benutzer die Eingabe fortsetzt, bis er das gewünschte Format eingibt. oder Sie können nur beenden, wenn die Eingabe ungültig ist. alles zusammen, zum Beispiel:

do{ 
    $parent = read-host -prompt 'Enter full parent path' 
    $parent = $parent -replace '^\\','' 
}while($parent -like '*:*') 
+0

Super, danke. Ich habe versucht, herauszufinden, wie man die Loops macht, aber ich war nicht in der Lage, es sehr zu vertiefen. –

+0

Wie mache ich eine mehrfache while-Anweisung? Muss ich eine zusätzliche Schleife hinzufügen? Ich versuchte, 'while ($ parent -like '*: *')' mit '([string] :: IsNullOrWhiteSpace ($ Server))' 'zu verbinden, aber es schien nicht zu funktionieren ... Würde ich einbinden müssen die zwei innerhalb einer 'if' Aussage? –

+0

Die obige while-Schleife kann so modifiziert werden, dass sie weiterhin auf Null- oder Whitespace-Einträgen läuft: 'while ($ parent-like '*: *' -or (! $ Parent))'. Randnotiz: '[system.string] :: isnullorwhitespace()' gibt für eine Null-Zeichenfolge oder eine leere Zeichenfolge den Wert true zurück. eine Kurzform, dies in Bedingungen wie if und while zu tun ist: 'if (! $ parent)' – cwr