сценарий, который подключается к Microsoft.Exchange Office365 тайм-аут в середине и снова запрашивает учетные данные - PullRequest
0 голосов
/ 23 апреля 2019

Клиент попросил меня разработать сценарий, который подключается к обмену Office365 и сканирует всех пользователей, чтобы убедиться, что некоторые почтовые ящики для приложений имеют к ним доступ.Я разработал сценарий, и он работает, но в середине сценария он снова запрашивает учетные данные.И он говорит, что создает новый сеанс для неявного удаленного взаимодействия.

Я попытался создать New-PSSessionOption -idleTimeout 1200000, который установил бы время ожидания около 2 часов.Это не сработало

Я тогда, хотя мой объект учетных данных был настроен неправильно, но когда я установил переменную $ userCredential в (get-credential), он делает то же самое.

$username = ""
$pwdTxt = gc .\SecureStringPassword.txt
$securePwd = $pwdTxt | ConvertTo-SecureString
$UserCredential = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd
$so = New-PSSessionOption -IdleTimeout 1200000
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -SessionOption $so -Authentication Basic -AllowRedirection

import-PSSession $session

$mailboxes = get-mailbox -ResultSize Unlimited

foreach ($m in $mailboxes) {
"working on $m"

$SmtpAddress = $m.PrimarySmtpAddress;
$Calendar = $SmtpAddress + ":\Calendar"

Add-MailboxPermission -Identity $m.Alias -User mitel-unified-messaging@contoso.com -AccessRights FullAccess -inheritanceType All -confirm:$false;

Add-RecipientPermission $m.Alias -AccessRights SendAs -Trustee mitel-unified-messaging@contoso.com -confirm:$false

Add-MailboxFolderPermission -Identity $calendar -User courtalert -AccessRights Author -confirm:$false ;

Add-MailboxPermission -Identity $m.Alias -user svcItrezzo@contoso.com -AccessRights FullAccess -inheritanceType All -confirm:$false;

write-host "done with $m" -Foregroundcolor Green
}

Exit-PSSession

Ожидаемые результаты - сценарий выполняется полностью без запроса учетных данных

фактические результаты - сценарий запрашивает учетные данные, обычно через ~ 2 минуты.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Вместо использования ...

Import-PSSession $session -AllowClobber

... которые иногда могут быть громоздкими.Попробуйте вместо этого использовать префикс, чтобы знать, когда вы запускаете EXO против EXP.

    $o365Cred = Get-Credential
    $ExoSession = New-PSSession -ConfigurationName Microsoft.Exchange `
    -ConnectionUri https://ps.outlook.com/powershell/ `
    -Credential $o365Cred `
    -Authentication Basic `
    -AllowRedirection
    Import-PSSession $ExoSession -Prefix Exo


    $ExpSession = New-PSSession -ConfigurationName Microsoft.Exchange `
    -ConnectionUri http://mail.$env:USERDNSDOMAIN/PowerShell/ `
    -Authentication Kerberos
    Import-PSSession $ExpSession -Prefix Exp

Таким образом, вы не наступаете на вещи.Тем не менее, это означает, что при использовании командлета необходимо использовать префикс.

Get-ExoMailbox
Get-ExpMailbox

Подробности находятся в файлах справки:

Import-PSSession

-Prefix Задает префикс к существительным в именах импортируемых команд.

Используйте этот параметр, чтобы избежать конфликтов имен, которые могут возникнуть, когда разные команды всеанс имеет то же имя.

Например, если вы задаете префикс Remote и затем импортируете командлет Get-Date, командлет в сеансе известен как Get-RemoteDate, и онне путать с исходной датой получения

Примеры: Добавление элементов оболочки Exchange в PowerShell ISE

0 голосов
/ 23 апреля 2019

Я понял проблему.Это не сильно связано с моим кодом, но я также внес несколько изменений в код.

Прежде всего, проблема была в сети.Среда клиента перенаправляла весь трафик порта 80/443 на свой брандмауэр / loadbalancer websense.Именно это приводило к разрыву соединений. После того как я предоставил исключение, сценарий работал гладко.

Однако было несколько раз, когда сценарию не нравилось то, что я делал, и он останавливал сеансИ это из-за параметра в

import-PSSession $session

Как только я изменил его на

Import-PSSession $session -AllowClobber

По умолчанию Import-PSSession импортирует все команды, кроме команд, имена которых совпадают с именами команд.в текущем сеансе.Чтобы импортировать все команды, используйте параметр AllowClobber.

, после всего этого скрипт работал гладко.

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