我们正在寻找用Powershell脚本replace我们当前的Kix脚本,我很好奇如何testing组成员映射networking驱动器。 我们目前的kix脚本基本上只是对每个用户组执行一个if语句,并testing用户是否属于该组,如果他们是映射networking驱动器的话。 这里是一个例子:
If InGroup("ADGROUP") Use m: "\\server\share" EndIf
我怀疑这是做这件事最有效的方法,但我想问我如何在PowerShell中完成同样的事情,以及人们推荐如何正确地为Active Directory中的用户映射驱动器和打印机。
如果需要这些信息,我们所有的客户都在Windows Vista / 7上,而我们现在正在转向AD 2008。
我将使用组策略首选项来映射AD中的驱动器。 有关详细信息,请参阅使用组策略首选项以基于组成员身份映射驱动器 。 我也鼓励用户教育如何向他们的图书馆添加networking位置。
我花了整整三天的时间试图将现有的Kix文件(我创build的)转换为Powershell。
我发现,Powershell还没有完全准备好用作login脚本。 也许在最新版本中,但是现在有了Powershell 2.0,我发现所使用的命令主要是从VBS移植过来的。
Kixtart中的“If”命令我认为是非常有效的,因为我已经在众多的客户端上使用了它,并且工作正常。 简单而简单,速度很快,对于以前从未使用过Kix的系统pipe理员来说,该命令很容易阅读。 我的意思是,如果您将Kixtart中的相同驱动器映射命令与您必须编写的驱动器映射命令进行比较,则在Powershell中执行相同的操作似乎过于复杂。
我已经写在我的博客上: http : //thisishelpful.com/kix-login-script-remote-desktop-services-server-terminal-server.html 。 我将通过比较我的kix脚本和修改后的Powershell脚本来更新它,你会明白我的意思。
希望有所帮助。
对于AD方面,您可能需要查看Quest的AD cmdlet。
# ************ script de connexion aux lecteurs réseau *************** $filter = "(&(objectcategory=user)(Name=$env:username))" $ds = New-object System.DirectoryServices.DirectorySearcher([ADSI]"",$filter) $user = ($ds.Findone()).properties.memberof #********************** Mappage du drive commun aux Directions S foreach ($grouppath in $user) { $group = ([adsi]"LDAP://$($grouppath.tostring())").sAMAccountname switch ($group) { "group1" {net use S: \\fileserver\share1 } "group2" {net use S: \\fileserver\share2 } "group3" {net use S: \\fileserver\share3 } "group4" {net use S: \\fileserver\share4 } } }
在PowerShell中检查组成员资格:
$wid=[System.Security.Principal.WindowsIdentity]::GetCurrent() $prp=new-object System.Security.Principal.WindowsPrincipal($wid) $adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator $IsAdmin=$prp.IsInRole($adm)
最后两行是内置组(有一些这样的 )的模式。 还有一个IsInRole的重载需要一个string,例如。 “ 域\组 ”。
要映射执行net use ...的驱动器可能是最简单的(PowerShell可以轻松调用控制台可执行文件)。