Захотелось дяденькам странного: решили выгрузить фотографии пользователей из Exchange.
А мне захотелось попавершелить. И вот встретились два одиночества.
Код простой и примитивный, основная фишка — работает из обычного PowerShell, находя точку подключения к Exchange и, собственно, подключаясь к нему.
Сохраните код в ЛюбоеИмя.ps1 и запустите его с любой доменной машины с правами, имеющими доступ к ящикам. Магическим образом создастся папочка User Photo на рабочем столе текущего пользователя и туда вывалятся все фоточки с именами в виде samAccountname.jpg Вот и вся история :)
$Foldername = "User Photo" $FolderPath = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::Desktop) + "\$FolderName" $FileType = ".jpg" $Obj = @() $ADDomain = Get-ADDomain | Select DistinguishedName $DSSearch = New-Object System.DirectoryServices.DirectorySearcher $DSSearch.Filter = '(&(objectClass=serviceConnectionPoint)(|(keywords=67661d7F-8FC4-4fa7-BFAC-E1D7794C1F68)(keywords=77378F46-2C66-4aa9-A6A6-3E7A48B19596)))' $DSSearch.SearchRoot = 'LDAP://CN=Configuration,'+$ADDomain.DistinguishedName $DSSearch.FindAll() | ForEach { $ADSI = [ADSI]$_.Path $Autodiscover = New-Object psobject -Property @{ AutoDiscoverInternalURI = [string]$ADSI.ServiceBindingInformation } $Obj += $Autodiscover } $AutoDiscoverInternalUri = $Obj[0] | Select AutoDiscoverInternalURI | select -ExpandProperty AutodiscoverInternalUri $ConnectionURL = $AutoDiscoverInternalUri -Replace "Autodiscover/Autodiscover.xml", "PowerShell" $ConnectionURL = $ConnectionURL -Replace "https", "http" $PSSession = New-PSSession -ConfigurationName "Microsoft.Exchange" -ConnectionUri $ConnectionURL -Authentication "Kerberos" Import-PSSession -Session $PSSession New-Item -Path $FolderPath -ItemType Directory Set-Location $FolderPath $Mailboxes = Get-Mailbox -ResultSize Unlimited | Where {$_.HasPicture -eq $True} $Mailboxes | ForEach { $FileName = $_.samAccountName + $FileType Get-UserPhoto $_.SamAccountName | Select-Object -ExpandProperty PictureData | Set-Content -Path ".\$FileName" -Encoding Byte }
Да, слышал, что таких скриптов, как говна за баней. Но говорю же — хотелось попавершелить чутка.