2013-07-10 2 views
1

BackstoryВысота в PowerShell

У меня есть скрипт, который вызывает Enable-Mailbox сразу после создания новой учетной записи пользователя, но проблема в том, мне нужно передать администратора учетные данные вместе с командой для того, чтобы Работа. Сценарий был создан с помощью графического интерфейса для облегчения процесса ежедневных задач администрирования и будет использоваться людьми, которые ничего не знают о PowerShell или даже о том, как сменить каталог на сценарий. Из-за этого я хочу, чтобы он запускался при двойном щелчке в проводнике и запрашивал пользователя один раз для учетных данных администратора. После того, как учетные данные вводятся они будут храниться в файле в том же каталоге, используя следующий код:

Try { 
    $credsFile = Import-Clixml "credentials" 
    $credsFile.Password = $credsFile.Password | ConvertTo-SecureString 
    $adminCreds = New-Object System.Management.Automation.PsCredential($credsFile.Username, $credsFile.Password) 
} 
Catch { 
    # This means the credentials file does not exist 
    $adminCreds = Get-Credential 
    $adminCreds = $adminCreds | Select-Object * 
    $adminCreds.password = $adminCreds.Password | ConvertFrom-SecureString 
    $adminCreds | Export-Clixml "credentials" 
    $adminCreds.password = $adminCreds.Password | ConvertTo-SecureString 
} 

Попытки

Поскольку Enable-Mailbox не имеет -Credential параметр для меня Чтобы перейти к нему, я пытался найти способ запуска скрипта в качестве администратора с самого начала с сохраненными учетными данными. Я создал сценарий, который пытается вызвать основной скрипт в повышенном состоянии.

Первый я попытался было:

Start-Process -File "$PSHOME\powershell.exe" -ArgumentList "-NoExit","-Command Scripts\MainScript.ps1" -Credential $adminCreds -Wait 

но он просто запрашивает учетные данные (каждый раз) и не загружает скрипт.

Далее я попробовал:

start-process powershell -verb runas -argument "scripts\MainConsole.ps1" 

Это загружает скрипт просто найти внутри ISE, но не загружает его, когда в два раза щелкнул в Проводнике.

Я также рассмотрел Invoke-Command и Invoke-Expression, чтобы попытаться запустить команду Enable-Mailbox в качестве администратора, но не удалось. Кто-нибудь знает, как запустить сценарий в качестве администратора с самого начала или хотя бы передать учетные данные в Enable-Mailbox и другие параметры, подобные этому?

ответ

1

Предполагая, что вы не используете этот сценарий на почтовом сервере, вы можете выполнить аутентификацию с использованием учетных данных администратора Exchange при вызове этого соединения? Что-то вроде:

$server = "exchangeserver.domain.local" 

Import-PSSession (New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$server/PowerShell -Authentication Kerberos -Credential $Credential) 
Enable-Mailbox -Identity $cn -Alias $user 

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

Если они нуждаются в дополнительной помощи с запоминания правильных имен пользователей, и т.д., я совсем как помогая с вещами, как это (в зависимости от того, как ваши счета называются):

$credential = Get-Credential "exchange_admin" # or 
$credential = Get-Credential $env:Username"_admin" 

По поводу работы с иконкой, один ужасающий обходной путь, о котором я знаю, заключается в создании командного файла, который работает

@powershell -FilePath \\fullpath\to\script.ps1 -params