0

コンソール メニューを使用して、AD ごみ箱から削除されたアイテムを復元しています。

4 つのメニュー オプションがあり、それぞれにユーザー入力 (読み取りホスト) が必要ですが、正しい形式である必要があります。そうしないと、復元が機能しません。コンソール メニューで各変数/読み取りホストの制約を定義する方法はありますか?

これが私のメニューです

#Keep looping and running the menu until the user selects Q (or q).
Do {
#use a Switch construct to take action depending on what menu choice
#is selected.
Switch (Show-Menu $menu " `nActive Directory Restore AD Tree Menu" -clear) {
 "1" {Write-Host " `nRestore AD Tree using LastKnownRDN" -ForegroundColor Yellow
     $RDN=Read-Host " `nEnter LastKnownRDN of deleted object (eg. STAFF) "
     .\Restore_ADTree.ps1 Restore-ADTree -lastknownRDN $RDN
     sleep -seconds 2
     } 
 "2" {Write-Host "Restore AD Tree using LastKnownRDN and LastKnownParent" -ForegroundColor Green
     $RDN=Read-Host " `nEnter LastKnownRDN of deleted object (eg. STAFF) "
     $LNP=Read-Host " `nEnter LastKnownParent of deleted object in quotes (eg. "OU=Staff,DC=xxxx,DC=xxxx,DC=xxxx,DC=xxxx")"
     .\Restore_ADTree.ps1 Restore-ADTree -lastknownRDN $RDN -lastknownParent $LNP
      sleep -seconds 5
      }
 "3" {Write-Host "Restore AD Tree Using Identity Distinguished Name" -ForegroundColor Magenta
     $DName=Read-Host " `nEnter the Distinguished Name of deleted object (eg. "OU=Test,OU=Staff,DC=xxxx,DC=xxxx,DC=xxxx,DC=xxxx") "
     .\Restore_ADTree.ps1 Restore-ADTree -identity $DName
     sleep -seconds 2
     }
 "4" {Write-Host "Restore AD Tree Using Identity GUID"
     $GUID=Read-Host " `nEnter the GUID of deleted object (eg. b48290aa-e14f-4417-9c03-560a546d18b9) "
     .\Restore_ADTree.ps1 Restore-ADTree -identity $GUID
     sleep -seconds 2    
     }
 "Q" {Write-Host "Goodbye" -ForegroundColor Cyan
     Return
     }
 Default {Write-Warning "Invalid Choice. Try again."
          sleep -milliseconds 750}
} #switch
} While ($True)

2の場合、$LNPが引用符で囲まれていることを確認したいと思います

3. 入力には少なくとも DC=XXXX,DC=XXXX,DC=XXXX が含まれ、引用符で囲まれることを希望します

4 については、xxxxxxxx-xxxx-xxxxx-xxxxx-xxxxxxxxxxxx に特殊文字がないことを確認したいと思います。

また、必要な形式についてのメッセージが間違っている場合は、コンソールに書き込むことができるようにしたいと思います.

誰かが私を正しい方向に向けることができれば、本当に感謝しています。

ありがとう、アメリア

4

1 に答える 1

1

Read-Host次のような独自の実装を作成できます。

function MyRead-Host($prompt, $regex)
{
    while(!$inputOk)    {   $inputOk = (IsInputOk (Read-Host -Prompt $prompt) $regex)   }   
}

function IsInputOk([string] $string, [string] $regex)
{
    if ($string -eq $regex) { return $true  } return $false
}

$regexこの特定の実装では、変数と等しくなるまでユーザーに入力を求めます。ジェネリック関数が必要な場合は、スマートな正規表現マッチングを行う必要があります。それ以外の場合は、ケースごとに独自のバリデーターを作成できます

于 2012-05-03T11:54:19.667 に答える