Попытка удалить нежелательный текст в PowerShell - PullRequest
0 голосов
/ 19 октября 2018

Я делаю сценарий PowerShell, который запрашивает наших клиентов Office 365 и экспортирует определенную информацию в файл .csv.Я борюсь с двумя полями: адрес электронной почты по умолчанию для пользователей и назначенные им подписки.Я могу получить данные, но не знаю, как ими манипулировать, чтобы они выглядели более презентабельно.

    Get-MSOLUser -All | select firstname,lastname,displayname,islicensed,{$_.Licenses.AccountSkuId},{$_.proxyaddresses -cmatch '^SMTP\:.*'},userprincipalname | sort FirstName | Export-Csv $directory\$tenantname\Export.csv -NoTypeInformation

1) Мне удалось получить их основной адрес электронной почты, так как SMTP-адреса в нижнем регистре всегда будут псевдонимами, но как мне удалить часть «SMTP:»?

2) Вместо «учетная запись посредника: номер артикула SKU» я надеялся сократить это до имен, которые мы обычно называем их!Например:

  • "E3" вместо "reseller-account: ENTERPRISEPACK"
  • "E5" вместо "reseller-account: ENTERPRISEPREMIUM"
  • "ProjectPro"вместо" реселлер-аккаунт: PROJECTPROFESSIONAL "
  • " Visio "вместо" реселлер-аккаунт: VISIOCLIENT "

Два вопроса действительно, но очень похожи!Надеюсь, что вы можете помочь.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы можете использовать хеш-таблицу в качестве таблицы поиска для требуемых переводов, например:

# create a hash with the desired translations.
# below are just the examples from your question. You need to fill in the rest..
$Licenses = @{
    "ENTERPRISEPACK" = "E3"
    "ENTERPRISEPREMIUM" = "E5"
    "PROJECTPROFESSIONAL" = "ProjectPro"
    "VISIOCLIENT" = "Visio"
}

Get-MSOLUser -All | 
    Select-Object firstname,lastname,displayname,islicensed,userprincipalname,
                  @{ Name = 'License'; Expression = { $Licenses[$(($_.Licenses.AccountSkuId) -replace '^.+:', '')] }},
                  @{ Name = 'PrimaryEmailAddress'; Expression = { ($_.proxyaddresses -cmatch '^SMTP\:.*') -replace "SMTP:", "" }} | 
    Sort-Object FirstName | Export-Csv $directory\$tenantname\Export.csv -NoTypeInformation

Чтобы получить все лицензии, которые пользователь может перечислить, код может быть расширен до:

# create a hash with the desired translations for the license plans.
# below are just the examples from your question. You need to fill in the rest..
$Licenses = @{
    "ENTERPRISEPACK" = "E3"
    "ENTERPRISEPREMIUM" = "E5"
    "PROJECTPROFESSIONAL" = "ProjectPro"
    "VISIOCLIENT" = "Visio"
}

# this calculated property returns all (translated) licenses per user as comma delimited string
$userLicenses = @{
    Name = 'Licenses'
    Expression = {
        $result = @()
        foreach($lic in $_.Licenses) {
            $result += $Licenses[$(($lic.AccountSkuId) -replace '^.+:', '')]
        }
        $result -join ', '
    }
}

Get-MSOLUser -All | 
    Select-Object firstname,lastname,displayname,islicensed,userprincipalname,$userLicenses,
                  @{ Name = 'PrimaryEmailAddress'; Expression = { ($_.proxyaddresses -cmatch '^SMTP\:.*') -replace "SMTP:", "" }} | 
    Sort-Object FirstName | Export-Csv $directory\$tenantname\Export.csv -NoTypeInformation
0 голосов
/ 19 октября 2018

Чтобы добиться того, что вы можете использовать Расчетные свойства вместе с небольшой функцией для преобразования SkuId в дружественное имя и с помощью -replace для удаления SMTP-части, я создал для вас простую функциюдля преобразования вы можете добавить другие продукты так же, как и я:

Список продуктов / наименований продуктов Microsoft можно найти по этой ссылке

function Convert-SkuIdToFriendlyName
{
Param(
[string]$SkuId
)
    switch ($SkuId)
    {
        {$SkuId -match "ENTERPRISEPACK"} {return "OFFICE 365 ENTERPRISE E3"}
        {$SkuId -match "ENTERPRISEPREMIUM"} {return "OFFICE 365 ENTERPRISE E5"}
        default { 'Unknown' }
    }
}

Затем используйтеВычисленные свойства для замены части 'SMTP' и преобразования SkuId:

Get-MSOLUser -All | 
Select firstname,lastname,displayname,islicensed,
@{N="License";E={Convert-SkuIdToFriendlyName $_.Licenses.AccountSkuId}},
@{N="Email";E={$_.proxyaddresses -cmatch '^SMTP\:.*' -replace 'SMTP\:'}},userprincipalname | 
Sort FirstName 
...