首先,我对脚本编写起来很陌生,所以我认为应该解决这个问题背后的逻辑可能存在缺陷。我正在使用Windows Server 2012 R2,因此我认为PowerShell可能是最好的方法。
将计划任务设置为每晚运行一次并调用执行以下操作的脚本:
我的想法是我不想删除C:\ MyFolder,但我想删除其中的内容。我可能无法删除C:\ MyFolder中的内容,如果处于断开状态的用户是拥有内容的用户,那么为了解决这个问题,我将其注销(他们不应该离开断开连接的会话) )。
在做了一些阅读之后,我发现qwinsta /server:localhost
似乎在查询本地主机的用户并提供这种类型的输出:
PS C:\Users\EF112131> qwinsta /server:localhost
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
console 1 Conn
AB123456 2 Disc
rdp-tcp#0 cd789101 3 Active
rdp-tcp#1 EF112131 4 Active
rdp-tcp 65536 Listen
这为我提供了我关注的登录用户(AB123456
,cd789101
和EF112131
),并检查了他们会话的相应状态(Disc
, Active
)。我的想法是,从这里我可以将USERNAME
和STATE
拉进某种检查。如果检查将任何STATE
设置为Active
,则脚本将不执行任何操作并结束。如果没有Active
个状态,脚本将断开处于USERNAME
状态的任何Disc
,然后通过del /S C:\MyFolder\*
之类的操作清除C:\ MyFolder的内容
我在这里遇到的问题是我不知道如何从上面的输出中提取这些值?我认为它类似于awk
在Linux领域的情况,但我仍然没有想到它。
答案 0 :(得分:0)
Windows Server 2012 R2 + Powershell 4.0 =不再进行文本解析!
在这里查看网址:https://technet.microsoft.com/en-us/library/jj215451(v=wps.630).aspx
并使用以下命令查询
此致 格伦