我有几个 powershell 脚本用于删除联系人,然后将它们重新导入用户列表。我们在本地交换服务器上有这些脚本,但想要合并,所以我们将它们全部移动到一个中心位置。但是,由于这样做,其中一个停止了访问被拒绝错误的工作。例如以下:
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"
它正确返回目录列表。我们已经尝试缩短名称并删除引号,但这并不重要。我什至向 Mary 打了个招呼,并给了用户 Everyone 只读权限,但仍然没有。为什么 FilePath 命令不起作用但 Get-ChileItem 和 Import-Csv 都起作用的任何想法?脚本的最坏情况部分是在本地复制文件,使用它,然后删除它,但我希望能有更好的答案。
这绝对是权限问题。
当您运行时
Import-Csv
,这是由您的 PowerShell 执行的,以您的用户帐户运行;相反,当您要求 Exchange 运行异步作业(例如 MailboxImportRequest)时,该作业由Exchange执行,而不是由您执行;根据https://docs.microsoft.com/en-us/powershell/module/exchange/mailboxes/new-mailboximportrequest: