2017-01-26 5 views
1

Можете ли вы импортировать модуль через PowerShell с другой учетной записью пользователя? Я специально пытаюсь импортировать модуль ActiveDirectory с другой учетной записью в текущую регистрацию.Модуль импорта с другой учетной записью пользователя

Я не хочу использовать все возможности консоли, потому что я пытаюсь использовать текущий процесс Outlook для отправки электронной почты после завершения части кода, и если вся консоль будет поднята, это даст COM-ошибка (экземпляр PowerShell и Outlook не добавляются вместе).

SMTP способ отправки электронной почты или через Send-Mail не будет работать, даже если я могу выполнить ping SMTP-сервер, я получаю следующее сообщение об ошибке, которое из того, что я читал, связано с тем, что я не могу правильно общаться с SMTP-сервером?

Исключение, вызывающее «Отправить» с аргументом «1»: «Отказ отправки почты». В C: \ Users \\ Desktop \ SCRIPT.ps1: 64 char: 9 + $ SMTP.Send ($ MSG) + ~~~~~~~~~~~~~~~ + Категория: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: SmtpException

+0

Вы можете запустить новый процесс как другой пользователь с помощью 'psexec.exe', а затем вернуть то, что вам нужно. – BenH

ответ

0

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

Как вы упомянули AD я использовал Get-ADUser в качестве примера, но много команд Powershell имеет Credential или PSCredential параметр какое-то, проверьте документацию, чтобы узнать.

$Credentials = Get-Credential 

Get-ADUser JohnSmith -Properties DistinguishedName -Credential $Credentials 

В указанном выше примере будет запрашивать учетные данные, но вы также можете сохранить их в сценарии вместо этого на входе их каждый раз.

ПРИМЕЧАНИЕ. Сохранение учетных данных в файле небезопасно, поэтому будьте осторожны, какие учетные данные вы сохраняете и где их храните!

$Username = "DomainUserName" 
$Password = "PlainPassword" | ConvertTo-SecureString -AsPlainText -Force 
$Credentials = New-Object System.Management.Automation.PSCredential($Username ,$Password) 

Есть также other ways для сохранения учетных данных, но это слишком много, чтобы перечислять здесь.

+0

Спасибо. Это помогло мне - Get-Credential и добавление параметра -Credential для каждой команды. –

0

Модуль AD для powershell является оберткой вокруг большей части пространства имен System.DirectoryServices .NET Framework.

.NET, в свою очередь, обернут поверх старого компонента COM ADSI.

Из-за этого можно использовать кэшированные учетные данные Windows для обработки работы AD без использования опции -Credential.

Если вы кешируете учетные данные Windows Domain перед запуском скрипта, командлеты AD будут использовать эти кэшированные учетные данные для аутентификации в DC. Конечно, нет необходимости удалять кэшированные учетные данные ... но осознайте, что это статично. если пароль изменен в домене, вам необходимо повторно кэшировать его.

Управление учетными записями домена может выполняться также с помощью программы cmdkey.exe, которая присутствует с Win7. Используя этот инструмент командной строки, вы можете установить учетные данные Windows непосредственно перед запуском своего скрипта, а затем удалить учетные данные после.

Обратите внимание, что использование кэшированных кредитов основано исключительно на имени сервера, которое будет пытаться передать командлету. Если вы не укажете DC в ваших вызовах командлета, тогда он будет использовать переменную среды% logonserver%.

Критическая часть заключается в том, что имя сервера, используемое ADSI, должно точно совпадать с кешем учетных данных. Если используется короткое имя (server01), то это должно быть в кеше. Если используется полное имя dns (server01.domain.com), то это должно быть в кеше. Если вы считаете, что ваш сценарий может перейти на другой сервер, то этот сервер должен находиться в кеше.