Powershell 一点小工作
内部运维这个工作的毛病就是杂事多,七七八八的什么都得做,有时候上面赶个什么项目就得让我们来擦屁股。
最近就多出了个事,全公司开始推O365,这个是好事啊,但是同时还在推OneDrive for Business,老实说这个也是好事,但是同时还要把原来大家的同步盘的东西迁移到OneDrive上去,这样一来就麻烦了。
因为等时间一到,同步盘一关,大家存在上面的东西如果没有同步到OneDrive上的话,就再也看不到了。
所以最近这个是公司全球IT的头等大事,每天上班就是看报告,找人登陆Onedrive,做同步。
其实要做的事也简单,就是登陆一下OneDrive for Business,然后跑一个脚本,这个脚本总部也写过组策略,加到了本地任务里面去了,用计算机管理远程也能搞,就是要一个一个的点有点麻烦。
亚洲区是全球四大区里面最后一个开始这个任务的,所以现在每天就是亚洲的数字看起来最难看,老板看了不高兴,我们下面的也是压力大,后来想了个法子,让组里一个小朋友把没完成的人的任务一个一个在系统里面做好单子,指定给每个IT,然后大家来follow,一时间每个人都多了几十个单子,大家都觉得压力有点大。
本着为大家造福的想法,我想是不是能用什么方法把一些工作简化一点。
这件事其实很简单的,就像上面说的,就是让用户开一下软件,然后运行一个脚本就行。所以把事情拆成两部:1. 打开软件,2. 如果打开过软件了,运行脚本
打开软件只能让用户自己来做了,我想是不是能让跑脚本这个事变得简单一点。
首先要确认那些用户打开过了,OneDrive for Business打开过的话,会自动生成一个OneDrive的文件夹,只要检测到这个文件夹就可以了。
脚本方面用Powershell吧。
先要检测一下用户在不在
Test-Connection $a.substring(2,12) -Quiet -count 1
本来要用ping的,后来搜索了一下,Test-Connection更符合需要,我本来就是想测试一下计算机是不是在线嘛。
$a是从一个文件里面读取的
$list = Get-Content ".\list.txt"
foreach($a in $list)
list.txt这个文件里面存的是每台机器应该的OneDrive的文件夹的路径,然后用substring来取出计算机名字用来测试连接用。
test完了之后就要去检测是不是用这个路径了,这个更简单,用Test-Path就好了,但是之后还要做个报告出来,所以用个if方便后续处理
$check = Test-Path $a
if($check)
有这个路径,说明已经运行过软件了,只要跑脚本就行,但是这里的脚本有匹配每个人配置文件的地方,要远程用用户身份调用有点麻烦,曲线救国,咱们给它加到开机启动里面去。然后在cmd脚本里面最后一行加一个%d删除自身就好。
值得注意的是开机启动的文件夹有两个,一个是在 %userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 里面这个是用户的启动文件,还有一个是在 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 里面,这里是全局的启动文件。
如果光是要跑一下脚本,其实放哪里都一样,但是我们这里要让cmd文件跑完了自己删除掉,全局文件夹的话个人是默认没有权限的,所以还是得麻烦一点,放在%userprofile%下面,还好我们的路径里面其实就有每个人的%userprofile%的绝对路径,就是要拿出来的话因为每个人的%userprofile%文件夹名字长度不一样,从前面取的话不方便,得从字符串末尾去拿,但是substring又不支持用负数,只能变通一下了:
"Opened "+$a | Out-File -Append .\Checkresult01.txt
$b = -1*$a.Length
$c = [string]::join('',($a)[$b..-19]) + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\"
用[string]::join(‘’,($a)[$b..-19])就可以用负数了,想想还是Python方便啊,字符串想怎么拿怎么拿。
拿到了启动路径就方便了,拷贝一下,拷一个cmd过去,然后在log里面写上一句:
Get-ChildItem .\CopyClean | Copy-Item -Destination $c
"Opened and add script"+$a | Out-String
这样一来工作就方便了很多,每天去portal里面跑一个报告,然后根据报告生成一下list,之后只要跑脚本就好。大家的工作就是不停的让没有打开过软件的人打开软件就行了。
感觉做了一点微小的工作,给大家节约了几秒时间,还是不错的。

