簡體   English   中英

簽入Powershell之后將用戶添加到AD組

[英]Adding a User to AD group after checking in Powershell

我正在嘗試檢查AD中的用戶是否屬於某個用戶組,以及是否未將其添加到該用戶組中。

我擁有的腳本似乎無法正常工作。

*Import-Module ActiveDirectory

$Grpex26Month = "EX-Retention 26 Months"
$Grpex13Month = "EX-Retention 13 Months"

Function Check-IsGroupMember{

Param($user,$grp)

$strFilter = "(&(objectClass=Group)(name=" + $grp +"))"

$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = "Subtree"

$colResults = $objSearcher.FindOne()

$objItem = $colResults.Properties

([string]$objItem.member).contains($user)
}

$userList = get-aduser -f {surname -like 'm*'}

Foreach ($user in $userList) {
$Check = Check-IsGroupMember $user $grpex13month

If ($Check -eq 'False') {
Add-adgroupmember $grpex13month $user 
write-host $user.Name 
}
}*

現在,這是我修改過的腳本,以前已從一個組中刪除並添加到另一個組中,但是我認為上面的更改仍然可以。 我目前也只搜索“ M”,因為我知道此部分中有一個用戶需要此功能。

甚至沒有找到該用戶...這是我得到的所有響應示例,除了在首次編寫此腳本后設置的新用戶之外。

MLastName, FirstName 
Add-adgroupmember : The specified account name is already a member of the group
At \\ServerName\DataUsers$\DKendall\Scripts\Exchange groupremoval.ps1:31 char:1
+ Add-adgroupmember $grpex13month $user
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (EX-Retention 13 Months:ADGroup)[Add-ADGroupMember], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:1378,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember

為了說明Matt的功能,請檢查以下內容:

If ($Check -eq 'False') {

當要求PowerShell對一條語句進行評估時,它將查看第一個對象的類型,並嘗試將第二個對象轉換為相同的類型。 在這種情況下, $Check[boolean]表示其值為$true$false 當您將其回顯到主機時,PowerShell格式化程序會將其轉換為字符串,以使其對用戶友好,但這實際上不是對象。

$Check = $false

$Check.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Boolean                                  System.ValueType

現在,正如Matt所言,任何長度大於0的字符串在轉換為[boolean]時都將被評估為$true 因此,PowerShell查看您的語句,發現$Check[boolean]並嘗試將'False'轉換為[boolean]以匹配它。 由於'False'是長度超過0的字符串,因此它將轉換為$true 現在我們知道$Check = $false ,並且由於它將字符串轉換為$true[boolean]值,因此該語句顯示為:

If ($false -eq $true) {

因此,實際上,腳本正在執行與您想要的相反的操作。 解決方案包括:

If ($Check -eq $false) {

要么

If (-Not $Check) {

或縮短的版本(我會用什么)

If(!$Check){

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM