Я не могу преобразовать приведенную ниже длинную строку шаблона отображаемого имени в массив строк в приведенном ниже Powershell:
Цель состоит в том, чтобы иметь возможность отображать пользователя без указания c шаблонов строк.
$startsWith = @(
'Test'
'Sync_'
'admin'
)
$endsWith = @(
'365'
'\$'
'svc'
'Sync'
'user'
)
$uPNpattern = '^({0})|({1})$' -f $($startsWith -join '|'), $($endsWith -join '|')
$dnPattern = @(
'Admin'
'Calendar'
'Room'
'Prod'
'Account'
'Fax'
'Team'
'Office'
'Test'
'User'
'insp'
)
$displayNamePattern = '^({0})|({1})$' -f $($dnPattern -join '|')
# Member Outputs for Microsoft.Online.Administration.User based on https://docs.microsoft.com/en-us/powershell/module/msonline/get-msoluser?view=azureadps-1.0
$allUsers = @()
$allUsers = Get-MsolUser -All -EnabledFilter EnabledOnly | Where-Object {
($_.UserPrincipalName -notmatch $uPNpattern) -and
($_.UserPrincipalName -notlike '*#EXT#*') -and
($_.DisplayName -notmatch $displayNamePattern)
} | Select-Object FirstName,
LastName,
UserPrincipalName,
@{Label = 'SMTP Address(es)';
Expression = {
If (( $_.UserPrincipalName -match 'onmicrosoft.com$')) {
($_.proxyAddresses | Where-Object { ($_ -like 'SMTP*') -and ($_ -like '*onmicrosoft.com') }) -replace 'smtp:' -join ';'
} Else {
($_.proxyAddresses | Where-Object { ($_ -like 'SMTP*') -and ($_ -notlike '*onmicrosoft.com') }) -replace 'smtp:' -join ';'
}
}
},
AlternateEmailAddresses,
UsageLocation,
isLicensed,
Licenses,
@{Label = 'License(s)';
Expression = {
($_.Licenses | ForEach-Object { ($_.AccountSkuId | Where-Object { $_.AccountSkuId -like 'Company1Ltd*' }) -replace 'Company1Ltd:' } ) -join ';'
}
},
PasswordNeverExpires,
BlockCredential
$allUsers | Out-GridView -Title "$(($allUsers).Count.ToString()) user accounts in total"
Код ошибки:
Error formatting a string: Index (zero based) must be greater than or equal to zero and less than the size of the argument list..
At line:102 char:44
+ $displayNamePattern = '^({0})|({1})$' -f $($dnPattern -join '|')
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (^({0})|({1})$:String) [], RuntimeException
+ FullyQualifiedErrorId : FormatError
Однако, если секция фильтрации изменилась на эту длинную строку, она работает:
($_.DisplayName -notmatch 'Admin|Calendar|Room|Prod|Account|Fax|Team|Office|Test|User')