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