![错误 [7045]:请求的会话访问被拒绝。运行时 2 次](https://linux22.com/image/1403997/%E9%94%99%E8%AF%AF%20%5B7045%5D%EF%BC%9A%E8%AF%B7%E6%B1%82%E7%9A%84%E4%BC%9A%E8%AF%9D%E8%AE%BF%E9%97%AE%E8%A2%AB%E6%8B%92%E7%BB%9D%E3%80%82%E8%BF%90%E8%A1%8C%E6%97%B6%202%20%E6%AC%A1.png)
我正在尝试使用以下命令运行一些没有屏幕的自动化 GUI 测试
tscon 3 /dest:console
这在 Windows Server 2008(32 位)上运行良好,但我尝试将所有内容移至 Windows Server 2008 R2(64 位),但遇到了问题。在原始机器上,多次运行无屏幕测试(无需通过 RDP 进入机器)没有问题。现在在新机器上,测试也可以使用相同的命令运行一次,但第二次尝试时(无需使用 RDP 进入机器),我收到错误:
错误 [7045]:请求的会话访问被拒绝。
我尝试使用在此找到的以下脚本问题:
for /f %%i in ('qwinsta ^| grep "^>" ^| awk "{print $4}"') do set VAR=%%i
tscon %var% /dest:console
但它也只在第一次有效。第二次它也返回 ID 3,但随后我收到访问被拒绝的错误。
答案1
我找到了解决方案,使用带有 runas 的命令!runas /savecred /user:yogurt\administrator "tscon.exe 3 /dest:console",传递管理员密码,使用脚本http://www.sysopt.com/showthread.php?153867-quot-runas-quot-command-line-without-manually-typeing-a-password
答案2
使用以下代码创建bat文件:
(for /f %%i in ('qwinsta ^| grep "^>" ^| awk "{print $4}"') do set VAR=%%itscon %var% /dest:console)
这将关闭 RDP 会话并创建控制台为活动的会话。您可以通过执行命令 qwinsta 进行检查。让我们将该文件命名为 KeepSessionAlive.bat。
现在使用下面的代码创建一个 powershell 脚本,我们将检查控制台会话是否处于活动状态。如果它不活动,那么我们将执行上述 bat 文件,否则我们不会执行。
$val = qwinsta
$flag = $True
for ($i=0;$i-lt $val.Count;$i++)
{
if ($val[$i] -Match 'Console')
{
if($val[$i] -Match 'Active')
{
Write-Output $val[$i]
$flag = $False
}
}
}
If ($flag){
Write-Host 'Activating Session's
'Bat file create above'
}