如何使用Powershell注销多个用户?

时间:2016-07-01 17:28:11

标签: powershell

   $idle_timout = New-TimeSpan -minutes 1
Add-Type @'
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace PInvoke.Win32 {

    public static class UserInput {

        [DllImport("user32.dll", SetLastError=false)]
        private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

        [StructLayout(LayoutKind.Sequential)]
        private struct LASTINPUTINFO {
            public uint cbSize;
            public int dwTime;
        }

        public static DateTime LastInput {
            get {
                DateTime bootTime = DateTime.UtcNow.AddMilliseconds(-Environment.TickCount);
                DateTime lastInput = bootTime.AddMilliseconds(LastInputTicks);
                return lastInput;
            }
        }

        public static TimeSpan IdleTime {
            get {
                return DateTime.UtcNow.Subtract(LastInput);
            }
        }

        public static int LastInputTicks {
            get {
                LASTINPUTINFO lii = new LASTINPUTINFO();
                lii.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
                GetLastInputInfo(ref lii);
                return lii.dwTime;
            }
        }
    }
}
'@

$userId = (Get-Process -PID $pid).SessionID
$loggedOff = 0

foreach ($user in $userid){
   do
{
    $idle_time = [PInvoke.Win32.UserInput]::IdleTime

    if (($loggedOff -eq 0) -And ($idle_time -gt $idle_timout))
    {
        logoff $user

        $loggedOff = 1
    }

    if ($idle_time -lt $idle_timout)
    {
        $loggedOff = 0
    }
}
while (1 -eq 1)

}

我正在尝试编写一个脚本,该脚本将查找特定计算机的所有登录用户的用户PID,然后在设定的空闲时间后强行将其注销。现在写我有时间设置为1分钟进行测试但理想情况下它将是15分钟,我会将此脚本放入计划任务并让它以这种方式运行。我正在做的就是为所有登录的用户找到PID。目前我的脚本将找到当前登录的活动用户的PID并将其注销,但我需要脚本将所有人都记录下来。我在某处读到了我可以搜索资源管理器实例,然后根据它注销用户。如果有人有更多的见解或帮助,我将非常感激。谢谢你,可能正常运行时间。

1 个答案:

答案 0 :(得分:0)

您是否尝试过qwinsta命令?