在执行操作

时间:2015-05-06 22:59:52

标签: powershell

说明:

首先,我对脚本编写起来很陌生,所以我认为应该解决这个问题背后的逻辑可能存在缺陷。我正在使用Windows Server 2012 R2,因此我认为PowerShell可能是最好的方法。

我想做什么:

将计划任务设置为每晚运行一次并调用执行以下操作的脚本:

  1. 检查以确保没有活动用户登录到正在执行脚本的本地服务器
    • 处于断开连接状态的用户不会计入登录状态。
  2. 如果零活跃用户:
    • 注销处于断开状态的所有实际用户(非系统进程)
    • 删除C:\ MyFolder \ *
  3. 否则,什么都不做
  4. 我的想法是我不想删除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
    

    这为我提供了我关注的登录用户(AB123456cd789101EF112131),并检查了他们会话的相应状态(DiscActive)。我的想法是,从这里我可以将USERNAMESTATE拉进某种检查。如果检查将任何STATE设置为Active,则脚本将不执行任何操作并结束。如果没有Active个状态,脚本将断开处于USERNAME状态的任何Disc,然后通过del /S C:\MyFolder\*之类的操作清除C:\ MyFolder的内容

    我在这里遇到的问题是我不知道如何从上面的输出中提取这些值?我认为它类似于awk在Linux领域的情况,但我仍然没有想到它。

1 个答案:

答案 0 :(得分:0)

Windows Server 2012 R2 + Powershell 4.0 =不再进行文本解析!

在这里查看网址:https://technet.microsoft.com/en-us/library/jj215451(v=wps.630).aspx

并使用以下命令查询

  1. 查询用户:Get-RDUserSession
  2. 注销与Invoke-RDUserLogoff
  3. 断开连接的用户ID

    此致 格伦