如何防止删除单词

时间:2016-04-14 16:37:15

标签: windows powershell syntax file-sharing

我遇到了一个小问题,我必须要求用户不要在文件夹名称中添加反斜杠“\”,因为当我合并$ 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"
   }

1 个答案:

答案 0 :(得分:1)

  

我必须要求用户不要反斜杠" \"在文件夹名称

在第12行之后插入此行:

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

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

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

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

  

我一直试图阻止使用c:,d:,e:等驱动器   $ Parent,但即使我使用-in或-contains,它仍然允许

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

($parent -like '?:*')

或者你可以在路径中寻找冒号

($parent -like '*:*')

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

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