今天豆子需要远程注销一个终端服务器的用户,操作很简单,首先quser获取远程用户的sessionID,然后logoff命令注销即可

quser/server:XXXXlogoffsessionID/server:XXX


和早期的cmd和Linux的bash命令一样,quser的结果都是字符串。字符串的处理对于脚本来说比较麻烦,如果能够转换成标准的object对象就好了。


仔细观察一下quser的结果,可以看见他的输出结果很整齐,我如果能够把他中间的空格用逗号替换掉,那就是标准的csv格式,那就很容易转换为对象了。唯一的问题是有的列,比如sessionname为空,那我就需要数数到底多少个空格需要替换了

PSC:\users\yli\Documents>$a=quser/server:sydbcc02PSC:\users\yli\Documents>$aUSERNAMESESSIONNAMEIDSTATEIDLETIMELOGONTIMEsmithsrdp-tcp#516Active24692+13:293/14/20179:06AMllederbauerrdp-tcp#422Active1:183/14/20179:18AMjedwards23Disc1:393/14/20177:54AMtpickenrdp-tcp#224Active.3/14/20178:22AMokaragiaourisrdp-tcp#927Active183/14/20178:55AMbhuerdp-tcp#728Active123/14/20179:20AMmcherginets29Disc1:373/14/20178:58AMabishop30Disc2:483/14/20179:22AMfburns31Disc2:283/14/20179:37AMygordony32Disc2:073/14/201710:04AMtmoloneyrdp-tcp#033Active1:073/14/20179:30AMsmaroordp-tcp#134Active1:453/14/201710:19AMjwoodford35Disc223/14/201710:42AMmozardrdp-tcp#836Active563/14/201711:08AMgmarshrdp-tcp#637Active413/14/201710:56AMmking38Disc203/14/201711:11AMmcolganrdp-tcp#1139Active593/14/201711:16AMjbelgiovanerdp-tcp#1241Active393/14/201711:33AMndrabsch42Disc33/14/201711:57AM


直接看不太容易区分,转换成ASCII看看,可以看见32(代表空格)一共有16个

$a=quser/server:sydbcc02[int[]][char[]]$a[2]3210810810110010111498971171011143232323232323232323232114100112


okay,那我指定数量从2到17之间的空格都替换为逗号,从2开始是因为‘idle time’这些名字中间有空格就别替换了,最后代码如下

$quser=(quser/server:sydbcc02)-replace'\s{2,17}',','|ConvertFrom-Csv$quser|ftUSERNAMESESSIONNAMEIDSTATEIDLETIMELOGONTIME---------------------------------------------smiths16Disc33/14/20179:06AMllederbauerrdp-tcp#422Active1:263/14/20179:18AMjedwards23Disc1:473/14/20177:54AMtpickenrdp-tcp#224Active73/14/20178:22AMokaragiaourisrdp-tcp#927Active.3/14/20178:55AMbhuerdp-tcp#728Active203/14/20179:20AMmcherginets29Disc1:443/14/20178:58AMabishop30Disc2:563/14/20179:22AMfburns31Disc2:363/14/20179:37AMygordony32Disc2:153/14/201710:04AMtmoloneyrdp-tcp#033Active1:153/14/20179:30AMsmaroordp-tcp#134Active1:523/14/201710:19AMjwoodford35Disc303/14/201710:42AMmozardrdp-tcp#836Active.3/14/201711:08AMgmarshrdp-tcp#637Active483/14/201710:56AMmking38Disc27mcolgan39Disc.3/14/201711:16AMjbelgiovanerdp-tcp#1241Active473/14/201711:33AMndrabschrdp-tcp#342Active.3/14/201711:57AMalawton43Disc113/14/201712:02PM


这样子就可以很容易的进一步处理了,同样的思路也可以用在其他的cmd命令上。