Ich stoße auf einige Probleme, bei denen die Benutzereingabe validiert werden sollte, wenn die Nummern 1-52 eingegeben werden. Allerdings Zahlen 6-9 die nur Zahlen sind, wird es einen Fehler aus irgendeinem Grund geben ...Ist es nur ich oder ist Powershell Probleme beim Lesen Bereich von Zahlen 6-9 (von 1-52)?
Hier ist der Code:
Function PrintArrayAsGridWithDisplayNumber
{
param([string[]]$Array,[ValidateRange(1,24)][int]$ColumnCount)
[int]$arrDisplayNumCounter = 1
$GridSplat = @{
InputObject = $Array|ForEach-Object {
New-Object psobject -Property @{'Value' = "$arrDisplayNumCounter - " + $_};
$arrDisplayNumCounter++
}
Property = 'Value'
}
if(-not $PSBoundParameters.ContainsKey('ColumnCount'))
{
$GridSplat['AutoSize'] = $true
}
else
{
$GridSplat['Column'] = $ColumnCount
}
$table = Format-Wide @GridSplat | Out-String
Write-Host $table
}
Function AskUserSelectUserPropertiesToQueryAD
{
Param()
[String[]]$validAdProperties = @('SamAccountName', 'msRTCSIP-UserEnabled', 'msRTCSIP-OptionFlags', 'msRTCSIP-PrimaryUserAddress', 'msRTCSIP-PrimaryHomeServer',
'mail', 'msExchMasterAccountSid', 'homeMDB', 'proxyaddresses', 'legacyExchangeDN',
'lastLogonTimestamp', 'logonCount', 'lastLogoff', 'lastLogon', 'pwdLastSet', 'userAccountControl', 'whenCreated', 'whenChanged', 'accountExpires',
'sn', 'givenName', 'displayName', 'distinguishedName', 'initials', 'l', 'st', 'street', 'title', 'description', 'postalCode', 'physicalDeliveryOfficeName',
'telephoneNumber', 'facsimileTelephoneNumber', 'info', 'memberOf', 'co', 'department', 'company', 'streetAddress', 'employeeNumber', 'employeeType', 'objectGUID',
'employeeID', 'homeDirectory', 'homeDrive', 'scriptPath', 'objectSid', 'userPrincipalName', 'url', 'msDS-SourceObjectDN', 'manager', 'extensionattribute8')
[Int]$displayDemoNumber = 40
[Int]$numOfDisplayColumns = 3
[String]$displayDemoNumberValue = $validAdProperties[$displayDemoNumber - 1]
PrintArrayAsGridWithDisplayNumber $validAdProperties $numOfDisplayColumns
$selectedAdPropertiesQuery = @()
$minValidNumber = 1
$maxValidNumber = $validAdProperties.length
While (($userInput -notlike "f*"))
{
# Ask user input
If (!($selectedAdPropertiesQuery))
{
$userInput = Read-Host " Enter number to select property to export in search results csv file (e.g.: for $displayDemoNumberValue, enter $displayDemoNumber)"
} Else {
$userInput = Read-Host " Enter number to select property to add in search results csv file, or enter `"f`" if finished"
}
# Write error if user input was not valid number or f. Else add search value to array if number is valid and not like f.
If ((($userInput -lt $minValidNumber) -or ($userInput -gt $maxValidNumber)) -and ($userInput -notlike "f*")) # write warning and do not include input as a value
{
Write-Host '$minValidNumber =' $minValidNumber
Write-Host '$maxValidNumber =' $maxValidNumber
Write-Host '$userInput =' $userInput
Write-Warning "Invalid number entered: $userInput `nnumber was out of range($minValidNumber - $maxValidNumber)"
Write-Host ""
} ElseIf ((($userInput -ge $minValidNumber) -or ($userInput -le $maxValidNumber)) -and ($userInput -notlike "f*")) {
$userValidatedInput = $validAdProperties[$userInput - 1] # selected property
$selectedAdPropertiesQuery += $userValidatedInput
Write-Host "User Properties Selected = $selectedAdPropertiesQuery"
Write-Host ""
}
}
Write-Output $selectedAdPropertiesQuery
}
AskUserSelectUserPropertiesToQueryAD
Hinweis: Wenn ich die Read-Host
-[Int]Read-Host
werfen , die Nummern werden erfolgreich sein, aber es wird ein Fehler ausgegeben, wenn Sie f
eingeben, was eine Endlosschleife verursacht. Ich habe verschiedene Dinge ausprobiert, aber ich kann es einfach nicht richtig verstehen.
Wenn jemand mir helfen könnte zu verstehen, würde ich es begrüßen. Vielen Dank.
Problem ist die Eingabe 'f' druckt immer noch einen Fehler, weil es immer noch, es zu konvertieren versucht. Endlich fand ich die Antwort, nachdem ich 4 Stunden daran gearbeitet hatte. Es läuft im Grunde darauf hinaus, mehrere Umwandlungen zu verwenden (denn auch nach dem Durchlaufen der Schleife bleibt die vorherige Umwandlung bei der Neuzuordnung mit dem Variablennamen hängen). Ich werde die Antwort unten posten. –
Ich danke Ihnen, dass Sie mir den Grund gezeigt haben, warum es nicht als Int gelesen wird. Der Standardtyp für die Zuweisung einer Variablen ist [Byte] [Char], sofern sie nicht auf einen bestimmten Typ angewendet wird. Das wird in der Zukunft gut zu wissen sein, und technisch beantwortet es die Frage, warum es es nicht liest. –