如何防止单词被删除

How to prevent words from being removed

我 运行 遇到了一个小问题,我必须要求用户不要在文件夹名称中放置反斜杠“\”,因为它会在我组合 $Server 和 $Parent 时删除服务器名称... 我如何防止这种情况发生?我不想限制我的用户添加反斜杠...

此外,我一直试图阻止在 $Parent 中使用 c:、d:、e: 等驱动器,但即使我使用 -in-contains 它仍然允许输入 c:\xxxx 或 d:\xxxx。我该如何防止呢?

    # 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"
   }

I have to require the user to NOT put a backslash "\" in the folder name

在第 12 行之后插入此行:

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

如果 $parent 在位置 0 包含反斜杠,它将用空字符串替换它。如果没有,则没有任何作用。

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

从技术上讲,这不会阻止用户在文件夹名称中添加反斜杠,但如果 he/she 这样做,它将删除它,这具有类似的效果。

I've been trying to prevent c:, d:, e:, etc. drives from being used in $Parent, but even if I use -in or -contains it still allows

-in 和 -contains 对集合进行操作,而不是单个对象(如 $parent)。对于 $parent,您可能想使用 -like 或 -match。您可以像这样检查驱动器号格式的路径:

($parent -like '?:*')

或者您可以在路径中查找冒号

($parent -like '*:*')

您可以在 while 循环中使用这些条件中的任何一个,强制用户继续输入,直到 he/she 输入您想要的格式。或者如果输入无效则可以退出。把它们放在一起,例如:

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