|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Распарсить строку |
|
PowerShell - [решено] Распарсить строку
|
Новый участник Сообщения: 48 |
Это снова я)
Итак мой скрипт на синхронизацию контактов Exchange Param( [string] $csv ) [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $zz = 0 $z = $zz $string = $_.OU Import-Csv $csv | ForEach-object -process ` {` $EEA = $_.E $name = $_.A try {New-MailContact ` -ExternalEmailAddress $EEA ` -Name $_.N ` -Alias $_.A ` -FirstName $_.FN ` -Initials $_.I ` -LastName $_.LN ` -OrganizationalUnit $_.OU -WarningAction SilentlyContinue -ErrorAction Stop | Set-MailContact -CustomAttribute11 $_.D -WarningAction SilentlyContinue; Write-Host $name "......Create" -ForegroundColor Green; $z = $zz + 1} catch { if($_.CategoryInfo.Reason -eq "ADObjectAlreadyExistsException") { Get-Contact $name Get-ADOrganizationalUnit -Filter 'name -eq "domen.ru/Контакты/еще/чтото/аВотПоследнееМнеНужно"' if((Get-Contact $name).WindowsEmailAddress -ne $EEA){ Set-MailContact -Identity $name -ExternalEmailAddress $EEA;Write-Host $name -ForeGround Magenta;Write-Host "................Already Exists, BUT not Actual....Replace Email" -ForegroundColor Red} if((Get-Contact $name).WindowsEmailAddress -eq $EEA){ Write-Host $name -ForeGround Magenta;Write-Host "................Already Exists and Actual" -ForegroundColor Green} if((Get-Contact $name).OrganizationalUnit -ne $_.OU){Move-ADObject (Get-Contact $name).Guid -TargetPath (Get-ADOrganizationalUnit $аВотПоследнееМнеНужно).ObjectGUID} } } } |
|
Отправлено: 14:46, 01-07-2014 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать
А зачем постоянно вызывать Get-Contact $name. Почему не использовать переменную?
Import-Csv $csv | ForEach-Object -Process ` {` $EEA = $_.E $Name = $_.A $OU = $_.OU .............. catch { if($_.CategoryInfo.Reason -eq "ADObjectAlreadyExistsException") { $AOU = $OU.split("/")[-1] $contact = Get-Contact $name $AOU = Get-ADOrganizationalUnit -Filter 'name -eq "$AOU"' if($contact.WindowsEmailAddress -ne $EEA){ Set-MailContact -Identity $name -ExternalEmailAddress $EEA Write-Host $name -ForeGround Magenta Write-Host "................Already Exists, BUT not Actual....Replace Email" -ForegroundColor Red } else { Write-Host $name -ForeGround Magenta Write-Host "................Already Exists and Actual" -ForegroundColor Green } if($contact.OrganizationalUnit -ne $OU) { Move-ADObject $contact.Guid -TargetPath $AOU } } } } |
Отправлено: 15:26, 01-07-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 48
|
Профиль | Отправить PM | Цитировать $AOU = $OU.split("/")[-1]
-1 значит первый символ / с конца строки? а если 1 то сначала строки? |
Отправлено: 15:54, 01-07-2014 | #3 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Последний символ строки:
Первый: Второй: PS > "domen.ru/Контакты/еще/чтото/аВотПоследнееМнеНужно".split("/") domen.ru Контакты еще чтото аВотПоследнееМнеНужно Последний объект в массиве: Первый символ первого объекта в массиве: |
Отправлено: 16:04, 01-07-2014 | #4 |
Новый участник Сообщения: 48
|
Профиль | Отправить PM | Цитировать $AOU = Get-ADOrganizationalUnit -Filter 'name -eq "$AOU"'
Тут наверно должна быть другая переменная? ------- Что-то не проходит Move-Adobject Param( [string] $csv ) [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $zz = 0 $z = $zz Import-Csv $csv | ForEach-object -process ` {` $EEA = $_.E $name = $_.A $OU = $_.OU try {New-MailContact ` -ExternalEmailAddress $EEA ` -Name $_.N ` -Alias $_.A ` -FirstName $_.FN ` -Initials $_.I ` -LastName $_.LN ` -OrganizationalUnit $_.OU -WarningAction SilentlyContinue -ErrorAction Stop | Set-MailContact -CustomAttribute11 $_.D -WarningAction SilentlyContinue; Write-Host $name "......Create" -ForegroundColor Green; $z = $zz + 1} catch { if($_.CategoryInfo.Reason -eq "ADObjectAlreadyExistsException") { $AOU = $OU.split("/")[-1] $contact = Get-Contact $name $OU1 = Get-ADOrganizationalUnit -Filter 'name -eq "$AOU"' if($contact.WindowsEmailAddress -ne $EEA){ Set-MailContact -Identity $name -ExternalEmailAddress $EEA -WarningAction SilentlyContinue Write-Host $name -ForeGround Magenta Write-Host "................Already Exists, BUT not Actual....Replace Email" -ForegroundColor Red } if($contact.OrganizationalUnit -ne $OU) { Move-ADObject $contact.Guid -TargetPath $OU1.ObjectGUID -WarningAction SilentlyContinue Write-Host $name -ForeGround Magenta Write-Host "................Already Exists, BUT Diferent OU....I changed " -ForegroundColor Red } else { Write-Host $name -ForeGround Magenta Write-Host "................Already Exists and Actual" -ForegroundColor Green } } } } |
|
Отправлено: 06:41, 02-07-2014 | #5 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 08:09, 02-07-2014 | #6 |
Новый участник Сообщения: 48
|
Профиль | Отправить PM | Цитировать Затык был такой :
[Root:] C:\Exchange> Get-ADOrganizationalUnit -Filter 'name -eq "контакты"' City : Country : DistinguishedName : OU=Контакты,DC=ava-nissan,DC=ru LinkedGroupPolicyObjects : {} ManagedBy : Name : Контакты ObjectClass : organizationalUnit ObjectGUID : 417e08a1-38f5-4c5a-bd6a-e7395545e37d PostalCode : State : StreetAddress : [Root:] C:\Exchange> $AOU.ObjectGUID Guid ---- 417e08a1-38f5-4c5a-bd6a-e7395545e37d все ок, но если копнуть глубже в лес домена [Root:] C:\Exchange> $AOU = Get-ADOrganizationalUnit -Filter 'name -eq "контакты/****"' [Root:] C:\Exchange> $AOU.ObjectGUID Guid ---- 8d273639-ae0a-49a4-992b-b2f11effdb16 78051762-3ea2-47be-b1b3-a1fada6fb331 |
Отправлено: 11:18, 02-07-2014 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2003/XP/2000 - Распарсить XLS и получить интересующие данные во внешний файл | bagfinder | Microsoft Office (Word, Excel, Outlook и т.д.) | 14 | 29-01-2014 14:41 | |
В одну строку..... | Vienna7 | Вебмастеру | 6 | 02-07-2013 10:05 | |
CMD/BAT - Чем бы распарсить .doc ? | mitiya | Скриптовые языки администрирования Windows | 5 | 29-11-2010 14:14 | |
.NET - Вычислить строку в C# | SmallGod | Программирование и базы данных | 1 | 26-02-2010 01:19 | |
Интерфейс - Нужен твик -убрать в проводнике "Избранные ссылки", адресную строку и строку поиска | Mishechka | Microsoft Windows Vista | 18 | 16-09-2008 16:19 |
|