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