PowerShell中的提升

时间:2013-07-10 09:26:35

标签: powershell administrator runas

背景故事

我有一个在创建新用户帐户后立即调用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和其他类似的参数?

1 个答案:

答案 0 :(得分: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