Powershell脚本无法在远程桌面上找到文件

时间:2017-02-15 01:12:37

标签: excel powershell access

我有一个简单的PowerShell脚本,我保存在C:\ Users \ Public中,其中包含以下代码:

#run program
$excel = new-object -comobject excel.application
$excelFiles = Get-ChildItem -Path "C:\Users\Public" -Include *.xls, *xlsm -Recurse
Foreach($file in $excelFiles)
{
    $workbook = $excel.workbooks.open("sendEmail.xlsm")
    $worksheet = $workbook.worksheets.item(1)
    $excel.Run("CDO_Mail_Small_Text")
    $workbook.save()
    $workbook.close()
}
$excel.quit()

如您所见,该脚本打开一个excel文件,该文件与.ps1文件位于同一文件夹中。 excel文件应该发送电子邮件。这是我创建的测试用例,它在我的本地计算机上运行正常。

我正试图让它在RDP上运行。当我将本地计算机上的两个文件复制到RDP上的相同位置(C:\ Users \ Public)并通过powershell运行.ps1文件时,我收到以下错误:

Exception calling "Open" with "1" argument(s): "'sendEmail.xlsm' could not be found.

由于这在我的计算机上完美运行,我不知道为什么它无法在远程计算机上运行。有什么想法吗?

最终,这就是我要做的事情:

  • 我在RDP上有一个Access数据库
  • 我在映射的驱动器上有一个Excel文件

在定期的基础上,我需要自动打开Excel文件,从Access数据库中提取表格,并操纵Excel文件中的数据并发送电子邮件。这一切都非常具体到我的业务细节,所以我欢迎有关其他想法的建议,但“只是做Access中的一切”不是一个选择。

我做了一个测试用例,其中所有内容都在映射驱动器上,在这种情况下一切正常,包括将其作为定期计划任务运行。我只需要弄清楚如何使用RDP上的Access数据库。

感谢。

1 个答案:

答案 0 :(得分:2)

致电

$excel.workbooks.open("sendEmail.xlsm") 

你应该真正传递一个完整的路径,而不仅仅是文件名。

如果您只是使用文件名,那么您依赖于默认目录的特定值,而这通常不是一个好的计划。

请参阅How do I get the directory of the PowerShell script I execute?了解如何获得完整路径(假设您的Excel文件与脚本位于同一文件夹中)