我有一个简单的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.
由于这在我的计算机上完美运行,我不知道为什么它无法在远程计算机上运行。有什么想法吗?
最终,这就是我要做的事情:
在定期的基础上,我需要自动打开Excel文件,从Access数据库中提取表格,并操纵Excel文件中的数据并发送电子邮件。这一切都非常具体到我的业务细节,所以我欢迎有关其他想法的建议,但“只是做Access中的一切”不是一个选择。
我做了一个测试用例,其中所有内容都在映射驱动器上,在这种情况下一切正常,包括将其作为定期计划任务运行。我只需要弄清楚如何使用RDP上的Access数据库。
感谢。
答案 0 :(得分:2)
致电
$excel.workbooks.open("sendEmail.xlsm")
你应该真正传递一个完整的路径,而不仅仅是文件名。
如果您只是使用文件名,那么您依赖于默认目录的特定值,而这通常不是一个好的计划。
请参阅How do I get the directory of the PowerShell script I execute?了解如何获得完整路径(假设您的Excel文件与脚本位于同一文件夹中)