从Powershell(Get-ADuser)的写主机输出中删除某些字符

时间:2018-11-12 14:20:16

标签: powershell compare

我正在比较两个域之间的用户,以确保使用以下两个步骤在一个域中禁用了用户,而在另一个域中禁用了用户:

域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,并且没有运气就替换了。我可能做错了。

1 个答案:

答案 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}