我有几个 powershell 脚本,用于删除联系人,然后将其重新导入到用户列表中。我们在 Exchange 服务器上本地有这些脚本,但想要合并,所以我们将它们全部移动到一个中心位置。但是,自从这样做以来,其中一个脚本停止工作,并出现访问被拒绝错误。例如以下内容:
New-MailboxInportRequest -Mailbox OurUser -FilePath "\\Server1\Share\Scripts and Commands\Contacts.pst" -TargetRootFolder "Contacts"
这失败了
无法打开 PST 文件“\Server1\Share\Scripts and Commands\Contacts.pst”。错误详细信息:拒绝访问该路径
如果我们将文件移动到邮件服务器的本地驱动器,我们就可以正常调用它。奇怪的是,这个使用 Import-csv 到完全相同的服务器位置的命令没有问题:
foreach ($i in (Import-Csv "\\Server1\Share\Scripts and Commands\AutoContacts.txt")) { Search-Mailbox -Identity $i.alias -SearchQuery 'kind:contacts AND subject:" - CompanyName"' -DeleteContent }
我已验证权限正确,甚至尝试将我正在运行 Exchange PowerShell 命令的用户明确添加到共享,但访问仍然被拒绝。为了进行测试,我们还尝试了以下方法:
Get-ChiltItem "\\Server1\Share\Scripts and Commands"
它正确返回了目录列表。我们尝试过缩短名称并删除引号,但都无济于事。我甚至尝试了万福玛利亚并授予用户 Everyone 只读权限,但仍然没有任何效果。知道为什么 FilePath 命令不起作用,但 Get-ChileItem 和 Import-Csv 都起作用吗?脚本的最坏情况部分是将文件复制到本地,使用它,然后删除它,但我希望能有更好的答案。
答案1
这肯定是权限问题。
当您运行 时Import-Csv
,此操作由您的 PowerShell 执行,以您的用户帐户身份运行;当您要求 Exchange 运行异步作业(例如 MailboxImportRequest)时,该作业由交换,不是你;按照https://docs.microsoft.com/en-us/powershell/module/exchange/mailboxes/new-mailboximportrequest:
在本地 Exchange 中,您需要向组 Exchange Trusted Subsystem 授予要导出或导入 PST 文件的网络共享的以下权限:
要从共享导入 PST 文件:读取权限
要将导出的 PST 文件保存到共享:读/写权限。
如果您不授予此权限,您将收到一条错误消息,指出 Exchange 无法与网络共享上的 PST 文件建立连接。