设为首页 收藏本站
查看: 1124|回复: 0

Powershell 创建文件,安全组和DFS链接

[复制链接]

尚未签到

发表于 2018-9-2 13:54:28 | 显示全部楼层 |阅读模式
  最近工作需要,需要创建80多个文件夹,300多个对应的安全组,把某部门的一堆用户放进对应的组,然后把这些文件夹都设置成DFS的Target的共享对象,然后拷贝文件。
  这些工作手工操作的话实在是太繁琐了,豆子考虑用powershell来实现这些功能,毕竟以后也用得着。这里把我的脚本备忘一下,以便日后参考:
  基本思路和实现其实都很简单,有个别地方dos命令和powershell的特殊符号无法直接识别,需要一些小技巧处理:
  基本过程

  •   创建用户组
  •   添加用户到组
  •   创建新的共享文件夹,添加成新的DFS对象,配置访问权限
  •   Robocopy 拷贝文件内容
  上面4个小任务,豆子很屌丝的写了4个对应的小脚本,当然放在一个里面也是可以实现的。
  脚本1就是从某个文件里面读取客户名,然后创建对应的组,然后根据我公司的访问要求进行嵌套,具体情况可以根据实际NTFS的需求来更改。里面的Try Catch我也写的很随意,Catch应该根据具体的报错进行输出,这里我都简单化了。
  script 1:
$groups= import-csv c:\temp\newgroups.csv  
foreach($group in $groups){
  
if($group.name -eq ""){}
  
else{
  
$name1="group.fs.clients."+$group.name.trim()
  
$name2=$name1+".apollo.rw"
  
$name3=$name1+".apollo.ro"
  
try{
  
New-ADGroup -Name $name1 -GroupCategory Security -GroupScope Global -DisplayName $name1 -Path "OU=clients,OU=File System,OU=MCU GROUPS, OU=- MCU.LOCAL -,DC=MITCH,DC=MITCHELLS,DC=COM,DC=AU" -Description "Root Folder Group Container"
  
write-host $name1 " is created"
  
}
  
catch
  
{
  
write-host $name1 " is already created"
  
}
  
try{
  
New-ADGroup -Name $name2 -GroupCategory Security -GroupScope Global -DisplayName $name2 -Path "OU=clients,OU=File System,OU=MCU GROUPS, OU=- MCU.LOCAL -,DC=MITCH,DC=MITCHELLS,DC=COM,DC=AU"
  
write-host $name2 " is created"
  
}
  
catch
  
{
  
write-host $name2 " is already created"
  
}
  
try{
  
New-ADGroup -Name $name3 -GroupCategory Security -GroupScope Global -DisplayName $name3 -Path "OU=clients,OU=File System,OU=MCU GROUPS, OU=- MCU.LOCAL -,DC=MITCH,DC=MITCHELLS,DC=COM,DC=AU"
  
write-host $name3 " is created"
  
}
  
catch
  
{
  
write-host $name3 " is already created"
  
}
  
try{
  
Add-ADGroupmember $name1 $name2,$name3
  
write-host $name2 " and " $name3 " are added into " $name1
  
}
  
catch
  
{
  
write-host $name2 " and " $name3 " are already into " $name1
  
}
  
try{
  
Add-ADGroupmember group.dfs.root.business.clients $name1
  
write-host $name1 " is added into group.dfs.root.business.clients"
  
}
  
catch
  
{
  
write-host $name1 " is already in group.dfs.root.business.clients"
  
}
  
}
  
write-host ""
  
}
  脚本里面读取的文本格式如下所示
DSC0000.png

  我们可以指定一个日期,然后查看是否成功创建了这些组,比如我是上周5创建的,然后这个博客是周一写的,所以随手查询一下上周四以后我创建的新组是啥
DSC0001.png

  类似的,第二个脚本就是一个双重循环,添加成员到组就是了,也很简单。trim的目的是为了去掉Excel文档里面的结束空格字符。
  script 2:
$users=get-content c:\temp\apollousers.csv  
$groups=get-content c:\temp\apollogroups.csv
  
foreach($user in $users){
  
$username=$user.trim()
  
if($username -eq "") {
  
}
  
else
  
{
  
write-host $username
  
foreach($group in $groups){
  
try{
  
add-adgroupmember -identity $group.trim() -member $username
  
write-host $group
  
}
  
Catch
  
{
  
write-host "Already added into " $group.trim()
  
}
  
}
  
}
  
write-host " "
  
}

  第三个脚本稍微花了我点时间,因为我里面调用的是DOS命令的icacls来更改权限,不太想用Powershell的set-acl 命令,因为太麻烦,我不想花时间去查.net>  另外dfsutil 要求我的服务器必须安装DFS feature, new-smbshare是Powershell 4.0里面的命令,因此只能运行在安装了.net4 的 windows 8 平台之上。
  script3:
$clients= import-csv c:\temp\dfs1.csv  
foreach($client in $clients){
  
if($client.name -eq ""){}
  
else{
  
$name1="group.fs.clients."+$client.name.trim()
  
$name2=$name1+".apollo.rw"
  
$name3=$name1+".apollo.ro"
  
$dir="M:\DataDisk_1\DFSLinks\clients-"+$client.name.trim()
  
$dir2="\\mitch.mitchells.com.au\business\clients\"+$client.name.trim()
  
$dir3="\\auvicfs00.mitch.mitchells.com.au\clients-"+$client.name.trim()+"$"
  
$nswdfs00="\\aunswdfs00\e$\DFSroot-business\clients\"+$client.name.trim()
  
$nswdfs01="\\aunswdfs01\e$\DFSroot-business\clients\"+$client.name.trim()
  
$vicdfs00="\\auvicdc00\e$\DFSroot-business\clients\"+$client.name.trim()
  
$vicdfs01="\\auvicdc01\e$\DFSroot-business\clients\"+$client.name.trim()
  
$perm1=':(R)'
  
$perm2=':(OI)(CI)(F)'
  
$perm3=':(OI)(CI)(R)'
  
$sharename="clients-"+$client.name.trim()+"$"
  
write-host $sharename
  
mkdir $dir\apollo
  
New-SmbShare -name "$($sharename)" -Path $dir -FullAccess Everyone -cachingmode none
  
icacls $dir /grant "$($name1)$perm1"
  
icacls $dir\apollo /grant "$($name2)$perm2"
  
icacls $dir\apollo /grant "$($name3)$perm3"
  
dfsutil link add $dir2 $dir3
  
icacls $nswdfs00 /grant "$($name1)$perm1"
  
icacls $nswdfs01 /grant "$($name1)$perm1"
  
icacls $vicdfs00 /grant "$($name1)$perm1"
  
icacls $vicdfs01 /grant "$($name1)$perm1"
  
}
  
}
  创建完了之后,可以通过Share和DFS进行确认。
  第四个脚本就是简单的robocopy脚本,我这里不需要保留源文件的权限,所以简单的
  robocopy source destination /E 就可以了



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561653-1-1.html 上篇帖子: Powershell与运维之服务器管理(二) 利用Powershell管理Dell服务器 下篇帖子: Powershell与运维之系统管理(一)磁盘管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表