5

我创建了一个基于 Active-Directory 模块的登录脚本,它查询用户组成员以映射他的驱动器等。

我已经用 PowerGui 编译它,并创建了一个 EXE 文件。问题是,用户计算机上不存在该模块。

有没有办法在没有模块的情况下做到这一点,或者将模块添加到编译中?

4

2 回答 2

2

对于组成员资格,您也可以在不连接到 AD 的情况下获取它,并解析 WHOAMI 实用程序的输出

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

if($groups -contains 'group1')
{
   do something
}
于 2013-04-30T09:52:40.047 回答
1

一种方法是使用 Active-Directory 服务接口 (ADSI)

您可以在另一个 SO 帖子中找到(我可以将用户与不同域的组匹配吗?)一种使用 ADSI 查找用户所属的所有组的方法,在帖子中它是 C# 代码,但很容易翻译。

这是一个简单搜索开始的小例子。

Clear-Host
$dn = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://WM2008R2ENT:389/dc=dom,dc=fr","jpb@dom.fr","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 命名空间

这种方式也是使用ADSI,不过是封装的,需要Framework .NET 3.5。您还可以在一篇文章中的 Edited (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

您可以在本地服务器上或域内的计算机上使用此解决方案,但从域外向 WMI 进行身份验证会稍微复杂一些。

于 2013-04-26T03:41:30.040 回答