【问题标题】:Elevation in PowerShellPowerShell 中的提升
【发布时间】:2013-07-10 09:26:35
【问题描述】:

背景故事

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

【问题讨论】:

    标签: powershell administrator runas


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-17
      • 2022-11-22
      • 2021-06-22
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多