错误 [7045]:请求的会话访问被拒绝。运行时 2 次

错误 [7045]:请求的会话访问被拒绝。运行时 2 次

我正在尝试使用以下命令运行一些没有屏幕的自动化 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'
}

相关内容