Если мне нужно выполнить процедуру в общей папке Exchange, например, изменить разрешения, но у меня нет полного пути к общей папке (который требуется в параметре -identity для большинства команд общих папок), как мне получить этот полный путь?
Некоторые ресурсы, которые я нашел, предлагают использовать powershell get-publicfolder -recurse
и фильтрация результатов, но в большой организации с тысячами общих папок эта команда может занять часы, если она вообще завершится.
Я сталкивался с этим несколько раз, и это меня расстраивало. Чаще всего я преследую пользователя, который подключается к этой папке, чтобы получить от него полный путь. Один или два раза я просто отпускал это и говорил: «Я не смогу сделать это без полного пути».
Но оказывается, что get-recipient
не требует полного пути для возврата результата.
[PS] > Get-Recipient myPublicFolder
Name RecipientType
---- -------------
myPublicFolder PublicFolder
И get-publicfolder
принимает ввод конвейера. Таким образом, вы можете получить родительский путь к общей папке (например, «\ Parent \ Path \ myPublicFolder») с помощью следующей команды:
[PS] > Get-Recipient myPublicFolder | Get-PublicFolder | Format-List ParentPath
ParentPath : \Parent\Path
Я протестировал, и это работает независимо от того, поддерживает ли общедоступная папка почту или нет. Если несколько общих папок соответствуют вашим результатам получения получателя, этот конвейер вернет родительский путь для всех из них.
[PS] > Get-Recipient "marketing"
Name RecipientType
---- -------------
Marketing-1 PublicFolder
Marketing PublicFolder
Marketing-2 PublicFolder
Marketing-3 PublicFolder
[PS] > Get-Recipient "marketing" | Get-Publicfolder | fl Name,ParentPath
Name : Marketing-1
ParentPath : \Parent\Path\Marketing
Name : Marketing
ParentPath : \Parent\Path
Name : Marketing-2
ParentPath : \Parent\Path\Sales
Name : Marketing-3
ParentPath : \Parent\Path\Sales\Reports
Я думал, что поделюсь, на случай, если кто-то еще столкнется с таким же разочарованием. Это работает на Exchange 2010.
Это не работает в Exchange 2013 или более поздней версии. На момент написания этой статьи (август 2019 г.), похоже, не существует другого способа легко получить путь к общей папке без фильтрации get-publicfolder -recurse
командлет.
В PowerShell:
$mailpf = Get-MailPublicFolder "yourEmailHere"
Get-PublicFolder $mailpf.EntryID
Это еще проще, если вы сделаете это:
Get-MailPublicFolder "PublicFolderName" | Get-PublicFolder
Результат будет выглядеть примерно так:
Name Parent Path
---- -----------
PublicFolderName \ParentFolderName
Использовать это
Get-PublicFolder -Recurse -ResultSize без ограничений | где name -match "publicfoldername"
У меня не работает. Для меня это работает, когда я использую эту команду:
Get-PublicFolder -Recurse | where {($_.MailEnabled -eq $True)}