无法从 windows 在 Powershell 中搜索生成电子邮件

Not able to spawn off email message from windows search in powershell

我有一个 powershell 脚本,可以直接在 Windows 搜索索引中搜索电子邮件和文件。我有以下代码:

$searchme="my thing to find"
$sql="SELECT System.FileName, System.ItemPathDisplay, System.DateCreated, System.DateModified, system.itemurl, system.itemtypetext FROM SYSTEMINDEX WHERE Contains(System.FileName, '"+$searchme+"') OR Contains('"+$searchme+"')"
$adapter = new-object system.data.oledb.oleDBDataadapter -argumentlist $sql, "Provider=Search.CollatorDSO;Extended Properties=’Application=Windows’;"
$ds      = new-object system.data.dataset
$adapter.Fill($ds)
foreach ($record in $ds.Tables[0].Rows)
{
    $exeparams = $record[4]
    write-host $exeparams
    write-host $exeparams.split(":")[0]
    if ($exeparams.split(":")[0] -eq "mapi15")
    {
        $exeparams2="mapi://" + $exeparams.substring(8)
    }
    write-host $exeparams
    write-host "start"
    $exe="start"
    $exe+" "+$exeparams | Out-File 'file.txt' -encoding Unicode
    write-host "start-process"
    Start-Process $exeparams
    Start-Process $exeparams2
    write-host "andpersand process"
    &$exe $exeparams
    &$exe $exeparams2
    write-host "dotnet"
    $proc = [Diagnostics.Process]::Start($exeparams)
    $proc.WaitForExit()
    $proc = [Diagnostics.Process]::Start($exeparams2)
    $proc.WaitForExit()
}

有几个 "shell" 调用,因为我试图弄清楚这是否是进程生成问题。文件工作没有问题。但是,如果我离开 mapi15,电子邮件将失败并显示没有此类界面,或者如果我将 mapi15 更改为 mapi,则会出现未指定的错误。我相信 Open mails in outlook from java using the protocol "mapi://" 可能是解决方案,但如果是的话,我不确定如何在 powershell 中应用它。谢谢你的帮助。

好的,这比我预期的要花更多的时间,我为此责怪 Office 2013。这是简短的回答:

$exeparams2 = $exeparams -replace "^mapi15", "mapi"
& start $exeparams2

这是现在为我打开电子邮件的代码。那个代码昨天没有这样做,它所做的只是告诉我:

Either there is no default mail client or the current mail client cannot fulfill the messaging request. Please run Microsoft Outlook and set it as the default mail client.

令人气愤的是,因为我确实有 Outlook,事实上它是 运行ning,并且是与电子邮件相关的所有内容的默认邮件应用程序。这让我很恼火,并派我去寻找 WTF 是错误的,以及我是否可以修复它。答案是 "I'm not real sure WTF was wrong, except maybe a naming change on MS's part" 和 "yes, yes I can fix it".

我终于找到了对我有用的修复程序(我相信这可能是 Office 2013/Office 365 特定的)在此线程的底部找到:

https://social.technet.microsoft.com/Forums/office/en-US/64c0bedf-2bcd-40aa-bb9c-ad5de20c84be/cannot-send-email-with-microsoft-outlook-2010-64-bit-from-adobe-outlook-not-recognised-as?forum=outlook

过程很简单。更改 2 个注册表项,然后重新设置您的默认邮件应用程序。注册表项:

HKLM:\Software\Clients\Mail(默认)
HKLM:\Software\Clients\Mail\Microsoft Outlook(默认)

(Default) 的值从 "Microsoft Outlook" 更改为 "Outlook"。

之后我将 Outlook 设置为所有可能的默认设置(在 Win8 中是控制面板 > 所有控制面板项目 > 默认程序 > 设置默认程序然后 select Outlook,然后选择第一个选项使其成为注册的所有分机的默认设置)。一旦完成,我就可以 运行 修改上面的代码来启动我在索引中搜索的电子邮件。