У меня есть следующий код ...итерации пропуска через какую-то сверхъестественную причиной
Function PrintArrayAsGrid
{
param([string[]]$Array,[ValidateRange(1,24)][int]$ColumnCount)
$GridSplat = @{
InputObject = $Array|ForEach-Object {
New-Object psobject -Property @{'Value' = $_}
}
Property = 'Value'
}
if(-not $PSBoundParameters.ContainsKey('ColumnCount'))
{
$GridSplat['AutoSize'] = $true
}
else
{
$GridSplat['Column'] = $ColumnCount
}
Format-Wide @GridSplat
}
Function UserInputAdSearchPropertyName
{
$userInputNotYetValidated = $true
$userInput = Read-Host "
Enter AD property name you wish to search with (e.g.: employeeNumber)"
$userInput = $userInput.Trim()
Write-Host "you input $userInput"
Write-Host ""
[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')
while ($userInputNotYetValidated)
{
If ($validAdProperties -notcontains $userInput)
{
Write-Error "Invalid AD Property Name: $userInput"
PrintArrayAsGrid $validAdProperties 4
$userInput = Read-Host " Enter one property name from list above to search with"
Write-Host "you input $userInput"
Write-Host ""
} Else {
$userInputNotYetValidated = $false
}
}
Write-Output $userInput
}
# Ask user to enter property name in AD to search with
$searchAdPropertyName = UserInputAdSearchPropertyName
Выход:
Enter AD property name you wish to search with (e.g.: employeeNumber): asdf
you input asdf
UserInputAdSearchPropertyName : Invalid AD Property Name: asdf
At C:\Scripts\Tests\temp2.ps1:59 char:26
+ $searchAdPropertyName = UserInputAdSearchPropertyName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,UserInputAdSearchPropertyName
Enter one property name from list above to search with:
вопрос здесь это не печатает список свойств и пропуская над итерация, где она вызывает функцию с PrintArrayAsGrid $validAdProperties 4
Вот что произойдет, если я добавлю следующие строки ...
Write-Host 'Found'
PrintArrayAsGrid $validAdProperties 4
Write-Host 'Found'
выход:
Enter AD property name you wish to search with (e.g.: employeeNumber): asdf
you input asdf
UserInputAdSearchPropertyName : Invalid AD Property Name: asdf
At C:\Scripts\Tests\temp2.ps1:60 char:26
+ $searchAdPropertyName = UserInputAdSearchPropertyName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,UserInputAdSearchPropertyName
Found
Found
Enter one property name from list above to search with:
И теперь, я на самом деле получить таблицу распечатаны, если добавить в выходе следующим образом ...
Write-Host 'Found'
PrintArrayAsGrid $validAdProperties 4
Write-Host 'Found'
Exit
Выход:
PS C:\Tests> .\test1.ps1
Enter AD property name you wish to search with (e.g.: employeeNumber): asdf
you input asdf
UserInputAdSearchPropertyName : Invalid AD Property Name: asdf
At C:\Tests\test1.ps1:61 char:26
+ $searchAdPropertyName = UserInputAdSearchPropertyName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,UserInputAdSearchPropertyName
Found
Found
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
PS C:\Tests>
Желаемый результат:
PS C:\Tests> .\test1.ps1
Enter AD property name you wish to search with (e.g.: employeeNumber): asdf
you input asdf
UserInputAdSearchPropertyName : Invalid AD Property Name: asdf
At C:\Tests\test1.ps1:61 char:26
+ $searchAdPropertyName = UserInputAdSearchPropertyName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,UserInputAdSearchPropertyName
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
Enter one property name from list above to search with:
Кто-нибудь знает, почему это происходит?
Вы уверены, что ваш 'Format-Wide @ GridSplat' линия производит любой вывод? Почему вы думаете, что он что-то пропускает? – n0rd
Также вы смешиваете 'Write-Output' и' Write-Host' в своем коде, это намеренно? – n0rd
Write-Output - назначить переменную, которая будет использоваться позже для нескольких вещей. Запись вывода - это просто записать в окно, чтобы пользователь знал, что происходит. –