При использовании функции в модуле Powershell, psm1, можно ли экспортировать функции ExchangeOnline, чтобы они были доступны в консоли? - PullRequest
0 голосов
/ 21 февраля 2020

Работа над несколькими функциями Powershell, которые подключаются к службам Office365 и автоматизируют многие из моих обычных задач. Обнаружено, когда у меня есть функция в psm1, при запуске функции для подключения к ExchangeOnline функции не отображаются на консоли, а только функции в пределах одного и того же модуля.

Хотя я знаю, что могу экспортировать модуль-член, это только работает для функций, когда модуль загружен, происходит задолго до того, как я подключаю-office365 -exchangeonline.

Есть ли способ экспортировать команды, загруженные при подключении к Office 365 после подключения?

Поместив Следуя функции в psm1 вместо ps1 и загружая ее, а затем выполняя connect-off365 -exchangeonline, все связанные с Exchange Online команды не могут использоваться в консоли. Тем не менее, имея ту же функцию в ps1 и загружая ее, функции ExchangeOnline работают.

Function Connect-Office365 {
    Param(
        [Switch]$ExchangeOnline,
        [Switch]$EO
    )

    if ($EO) { $ExchangeOnline = $true }
    elseif ($EO -and $ExchangeOnline) { Write-Warning "No need to declare ExchangeOnline and EO" }

    $Credential = Get-Credential -message "Enter Office 365 credentials,`r`nor cancel to not connect to Office 365"
    if ($null -eq $Credential) { Write-Host "Skipped entering credentials"; $TryAgain = $False }
    if ($ExchangeOnline) {
        Write-Host "Connecting to Exchange Online Services"
        $global:ExchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $Credential -Authentication Basic -AllowRedirection -EA stop
        Import-PSSession $global:ExchangeSession -AllowClobber -DisableNameChecking
    }
}

Например

PS C:\Users\TechWithAHammer> import-module C:\scripts\Connect-Office365.psm1    
PS C:\Users\TechWithAHammer> connect-office365 -eo                                                                        Connecting to MSOL Services                                                                                             Connecting to Exchange Online Services

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     1.0        tmp_3zvdxnnc.gd0                    {Add-AvailabilityAddressSpace, Add-DistributionGroupMember...


PS C:\Users\TechWithAHammer> get-mailbox
get-mailbox : The term 'get-mailbox' is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ get-mailbox
+ ~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (get-mailbox:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

1 Ответ

0 голосов
/ 21 февраля 2020

Согласно ответу в Команды из модуля неявного удаленного взаимодействия, недоступные при создании из функции другого модуля , обнаружили, что мне пришлось использовать Import-Module для импорта модулей Exchange Online и центра соответствия и безопасности в центр глобальный сеанс.

Модуль импорта (Import-PSSession $ global: ExchangeSession -AllowClobber -DisableNameChecking) -Global

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...