1

背景故事

我有一个脚本在创建新用户帐户后立即调用 Enable-Mailbox,但问题是我需要将管理员凭据与命令一起传递才能使其工作。该脚本是使用 GUI 制作的,以简化日常管理任务的过程,并且将被那些对 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 和其他类似参数?

4

1 回答 1

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 变量(或者让他们每次都登录)。

如果他们在记住正确的用户名等方面需要额外的帮助,我非常喜欢帮助处理这样的事情(取决于您的帐户的命名方式):

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

关于从图标运行的主题,我知道的一个可怕的解决方法是创建一个运行的批处理文件

@powershell -FilePath \\fullpath\to\script.ps1 -params
于 2013-07-11T11:41:21.397 回答