我已经创建了基于Active-Directory模块一个登录脚本编译,以便查询用户组成员以自己的映射驱动器等PowerShell的 - 与模块
我与PowerGUI的编译它,创造一个EXE文件。 问题是,该模块在用户计算机上不存在。
有没有办法做到这一点,没有模块,或将模块添加到编译?
我已经创建了基于Active-Directory模块一个登录脚本编译,以便查询用户组成员以自己的映射驱动器等PowerShell的 - 与模块
我与PowerGUI的编译它,创造一个EXE文件。 问题是,该模块在用户计算机上不存在。
有没有办法做到这一点,没有模块,或将模块添加到编译?
对于组成员,你也可以得到它没有连接到AD,并解析WHOAMI工具
$groups = WHOAMI /GROUPS /FO CSV | ConvertFrom-Csv | Select-Object -ExpandProperty 'Group Name'
if($groups -contains 'group1')
{
do something
}
一种方法是使用Active-Directory服务接口(ADSI)。
你可以在其他SO帖子(Can I match a user to a group accross different domains?)中找到一种方法来查找用户所属的所有组,使用ADSI,它是一个C#代码,但它很容易翻译。
这是一个简单搜索开始的小例子。
Clear-Host
$dn = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://WM2008R2ENT:389/dc=dom,dc=fr","[email protected]","Pwd")
# Look for a user
$user2Find = "user1"
$Rech = new-object System.DirectoryServices.DirectorySearcher($dn)
$rc = $Rech.filter = "((sAMAccountName=$user2Find))"
$rc = $Rech.SearchScope = "subtree"
$rc = $Rech.PropertiesToLoad.Add("mail");
$theUser = $Rech.FindOne()
if ($theUser -ne $null)
{
Write-Host $theUser.Properties["mail"]
}
另一种方法是使用System.DirectoryServices.AccountManagement Namespace。
这种方式也使用ADSI,但它被封装,并且您需要Framework .NET 3.5。您也可以在same post中找到,但在编辑(2011-10-18 13:25)部分,使用这种方式的C#代码。
您还可以使用WMI:
$user2Find = "user1"
$query = "SELECT * FROM ds_user where ds_sAMAccountName='$user2find'"
$user = Get-WmiObject -Query $query -Namespace "root\Directory\LDAP"
$user.DS_mail
您可以在服务器上或从区域内部的计算机localy使用此解决方案,但它更复杂一点,从外域WMI认证。
不错,谢谢! – Benny 2013-04-26 06:21:26
的输出为什么不从你的DC或\\域\ SYSVOL给他们打电话? – 2013-04-26 02:22:07