Удалите определенные символы из вывода записи хоста в Powershell (Get-ADuser) - PullRequest
0 голосов
/ 12 ноября 2018

Я сравниваю пользователей между двумя доменами, чтобы убедиться, что пользователи, отключенные в одном, отключены в другом, выполняя следующие два шага:

Домен 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 голосов
/ 12 ноября 2018

$User - это пользовательский объект (тип [pscustomobject], выводимый Import-Csv), а @{Name=Firstname2 Lastname2} - его строковое представление [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}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...