Powershell GUI 从电子邮件附件中拖放空参数

Powershell GUI Drag-and-Drop empty arg from email attachments

我有一个带有只读文本框的 GUI,我将文件拖到该文本框,然后一个函数随该文件一起运行。这在我的机器上适用于本地下载文件夹中的文件、所有文件扩展名、Outlook 电子邮件附件等。我没有问题。

一位同事已经开始使用它,但他无法成功地将电子邮件附件从 outlook 拖到邮箱中。 arg 是空的。这一切都适用于我的机器,但不是他的。我让另一个人测试,他们也有同样的问题。

$filebox.Add_DragEnter({
    if ($_.Data.GetDataPresent([Windows.Forms.DataFormats]::FileDrop)) {
        $_.Effect = [Windows.Forms.DragDropEffects]::Copy
    }
})
$filebox.Add_DragDrop({
    foreach ($file in $_.Data.GetData([Windows.Forms.DataFormats]::FileDrop)) {
        create_dir $file # Function doesn't even trigger here with outlook email attachments because no arg
    }
})

我们都来自共享收件箱。没有什么是硬编码来识别用户或定义设置路径的,它应该只是抓取放在框中的 arg 的路径,对吧? 我只是很困惑 drag/drop 如何处理某些文件而不是电子邮件附件,然后又如何在我的机器上完全工作。

我会认为自己是一个漂亮的新手编码员,而且是第一次弄乱 Powershell。 (在这种情况下我无权访问其他任何东西。无法编译 c#,powershell 就是它。)。也许我在这里遗漏了一些基本的东西。有人对此有什么想法吗?

文件格式将不存在,因为文件系统上没有物理文件。见 Upload fails when user drags and drops attachment from email client

$filebox.Add_DragDrop({
    if ($_.Data.GetDataPresent([System.Windows.Forms.DataFormats]::FileDrop)) {
        foreach ($file in $_.Data.GetData([System.Windows.Forms.DataFormats]::FileDrop)) {
            create_dir $file
        }
    }
    else {
        $outlook = New-Object -ComObject Outlook.Application
        $s = $outlook.ActiveExplorer().Selection
        foreach ($item in $s){
            foreach($a in $item.Attachments){
                $name = Join-Path -Path $dlpath -ChildPath $a.filename
                $a.SaveAsFile($name)
                create_dir $name
            }
        }
    }
})

正如德米特里所说,文件实际上并没有保存在机器上,所以我不能只复制项目。在这里,保存文件,然后调用create_dir函数,它可以从新的下载路径复制项目。