我正在比较两个域之间的用户,以确保使用以下两个步骤在一个域中禁用了用户,而在另一个域中禁用了用户:
域1:
Get-ADUser -SearchBase "OU=ou2,OU=ou1,DC=pre,DC=domain1,DC=com" -Filter * -Properties * | Select-Object Name | Export-Csv -encoding "utf8" Users.csv
域2:
$input = import-csv -path "Users.csv"
ForEach ($User in $input) {
$result = get-aduser -SearchBase "OU=ou2,OU=ou1,DC=pre,DC=domain2,DC=com" -Filter "name -eq '$($User.Name)'" | Select-Object Enabled
If ($result -eq $null) { Write-host -ForegroundColor Yellow $User "Name not found. Please do a manual check"
}
elseif ($result -like '*False*')
{
Write-host -ForegroundColor Red "**" $User "** must be disabled!"
}
else {get-aduser -SearchBase "ou=Users,ou=SCS,ou=All,dc=osit,dc=ad" -Filter "name -eq '$($User.Name)'" -Properties * | Select-Object Name, Enabled}
}
这有效,但是给了我以下输出:
Name Enabled
---- -------
Firstname1 Lastname1 True
@{Name=Firstname2 Lastname2} - Name not found. Please do a manual check
如何删除“ @ {Name =“和”}“? 我曾尝试将-ExtendProperity添加到$ result,并且没有运气就替换了。我可能做错了。
答案 0 :(得分:3)
$User
是一个自定义对象(类型[pscustomobject]
,由Import-Csv
输出),@{Name=Firstname2 Lastname2}
是其 stringized 表示形式 [1] ,因为Write-Host
将其参数字符串化以进行显示。
改为访问.Name
属性以获取名称:
Write-host -ForegroundColor Yellow $User.Name "- Name not found. Please do a manual check"
更多地习惯于使用单个可扩展字符串("..."
中的字符串插值):
Write-host -ForegroundColor Yellow "$($User.Name) - Name not found. Please do a manual check"
如果要包含完整的对象表示形式(如将其直接打印到控制台上一样),则需要Out-String
,但请注意,最终将得到多行输出:
Write-host -ForegroundColor Yellow "$($User | Out-String) - Name not found. Please do a manual check"
[1]您可以如下验证:$user = [pscustomobject] @{ Name = 'Firstname1 LastName1' }; "$user"
。输出为字符串@{Name=Firstname1 LastName1}
。