2013-04-25 72 views
5

我已经创建了基于Active-Directory模块一个登录脚本编译,以便查询用户组成员以自己的映射驱动器等PowerShell的 - 与模块

我与PowerGUI的编译它,创造一个EXE文件。 问题是,该模块在用户计算机上不存在。

有没有办法做到这一点,没有模块,或将模块添加到编译?

+0

的输出为什么不从你的DC或\\域\ SYSVOL给他们打电话? – 2013-04-26 02:22:07

回答

2

对于组成员,你也可以得到它没有连接到AD,并解析WHOAMI工具

$groups = WHOAMI /GROUPS /FO CSV | ConvertFrom-Csv | Select-Object -ExpandProperty 'Group Name' 

if($groups -contains 'group1') 
{ 
    do something 
} 
1

一种方法是使用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认证。

+0

不错,谢谢! – Benny 2013-04-26 06:21:26