我编写了一个 powershell 脚本,它会生成一个“EULA”类型的弹出窗口,用户必须同意。
它在登录时通过作为用户(非管理员)帐户的计划任务运行来执行此操作。它需要以提升权限运行,因此我使用以下脚本以提升权限运行它:
$pw= convertto-securestring "myPassw0rd" -asplaintext –force
$credential = new-object -typename system.management.automation.pscredential -argumentlist "-default-",$pw
$localArgs = "/c Powershell c:\scripts\myScript.ps1"
[System.Diagnostics.Process]::Start("cmd.exe", $localArgs, "Administrator", $credential.Password, $computer)
(我将加密密码以使其更安全一些,但这与这个问题无关。)
无论如何 - 我的问题是,当调用脚本时,它会在我的“漂亮”的 EULA 弹出窗口后面显示命令提示符窗口。
有没有办法隐藏/最小化命令窗口?
谢谢,
本
答案1
这应该是你所需要的:
$Process = new-Object System.Diagnostics.Process
$Process.StartInfo.UserName="Administrator"
$Process.StartInfo.Password=$Credential.Password
$Process.StartInfo.Domain="$Computer"
$Process.StartInfo.WindowStyle="Hidden"
$Process.StartInfo.FileName="cmd.exe"
$Process.StartInfo.Arguments="$localArgs"
$Process.Start()
答案2
您可以使用 Start-Process cmdlet(PowerShell 2.0):
启动进程cmd.exe -Credential $credential -WindowStyle Hidden -WorkingDirectory... -ArgumentList...
答案3
您不能将 -Credential 和 -WindowStyle 参数与 PowerShell v2 一起使用,您需要 PowerShell v3 或将 -NoNewWindow 和 -Credential 参数一起使用
您可以将以下代码用于 PowerShell v2:
$user = "{user}"
$pass = ConvertTo-SecureString -String "{password}" -AsPlainText -Force
$cred = new-object -typename System.Management.Automation.PSCredential `
-argumentlist $user, $pass
start-process -Credential $cred -NoNewWindow powershell "-command & '{path and script}'"