none
Завершения процесса если сеанс отключен RRS feed

  • Вопрос

  • Доброго времени суток, следующая задача, необходим завершать процесс у пользователя в случае если сеанс отключен(RDP или консольный)

    Пытаюсь сделать так:

    $process = get-process | select -expand name
    while ($process -contains "proc" )
    {
    	Start-Sleep -s 5
    	$owners = @{ }
    	gwmi win32_process -Filter "name='proc.exe'" | % { $owners[$_.handle] = $_.getowner().user }
    	$ps = get-process | select processname, Id, @{ l = "Owner"; e = { $owners[$_.id.tostring()] } }
    	$users = $ps.owner
    	if ($users)
    	{
    		foreach ($user in $users)
    		{
    			if ((qwinsta $user) -like "*disc*")
    			{
    				$owners = @{ }
    				gwmi win32_process -Filter "name='proc.exe'" | % { $owners[$_.handle] = $_.getowner().user }
    				$ps = get-process | select processname, Id, @{ l = "Owner"; e = { $owners[$_.id.tostring()] } }
    				if ($ps.Owner -eq "$user")
    				{
    					$ps | Stop-Process -Force
    				}
    				
    			}
    		}
    	}
    	
    	$process = get-process | select -expand name
    	
    	
    }


    Но процесс не закрываеться и powershell вылетает с ошибкой








    • Изменено Omni_Vidente 17 сентября 2017 г. 16:25
    17 сентября 2017 г. 15:49

Ответы

  • Нашел ошибку:

    $process = get-process | select -expand name
    while ($process -contains "proc" )
    {
    	Start-Sleep -s 5
    	$owners = @{ }
    	gwmi win32_process -Filter "name='proc.exe'" | % { $owners[$_.handle] = $_.getowner().user }
    	$ps = get-process | select processname, Id, @{ l = "Owner"; e = { $owners[$_.id.tostring()] } }
    	$users = $ps.owner
    	if ($users)
    	{
    		foreach ($user in $users)
    		{
    			if ((qwinsta $user) -like "*disc*")
    			{
    				$owners = @{ }
    				gwmi win32_process -Filter "name='proc.exe'" | % { $owners[$_.handle] = $_.getowner().user }
    				$ps = get-process | select processname, Id, @{ l = "Owner"; e = { $owners[$_.id.tostring()] } }
    				
    				foreach ($p in $ps)
    				{
    					if ($p.Owner -eq "$user")
    					{
    						$p | Stop-Process -Force
    					}
    					
    				}
    				
    			}
    		}
    	}
    	
    	$process = get-process | select -expand name
    	
    	
    }

    • Помечено в качестве ответа Omni_Vidente 17 сентября 2017 г. 16:34
    17 сентября 2017 г. 16:33