命令在脚本与shell中的行为不同

时间:2014-07-09 23:00:05

标签: powershell csv

我在文件中有两个powershell函数。第一个(Get-ImapAttachments)使用NetCmdlets IMAP cmdlet连接,从INBOX中的任何消息下载所有* .csv附件,然后将消息移动到另一个文件夹以保持INBOX清洁。我从NetCmdlets站点获得了这个功能,并根据我的需要稍微调整一下。在它自己的基础上,它按照我需要的方式工作。

我已经编写了第二个函数(Import-D2LData)来处理CSV文件。它是一个格式错误的CSV文件,在第一行有一个报告标题,每两行左右重复一次列标题。由于Import-Csv并不像我需要的那样灵活,我使用get-contentselect-object -skip 1的组合来开始导入,并且基本上构建一个长字符串以传递给{ {1}}。如果我手动运行该功能,它目前的工作方式也是如此。

当我在.ps1文件中运行它时会出现问题我已将它们放入。第一个函数触发就好了,第二个函数似乎就是这样。 ConvertFrom-Csv失败了,我最终输出了一堆空行。真正奇怪的是,我可以使用ConvertFrom-Csv命令来获取.ps1文件,并运行脚本的最后7行(从调用.开始),我得到了预期的结果

我确定我做了一件非常聪明的事情,但是在盯着代码几个小时之后,我现在还没有看到它...

Get-ImapAttachments

1 个答案:

答案 0 :(得分:1)

嗯,它不漂亮,但我最终将这些功能分成两个不同的脚本。当这还不够时,我在它自己的PowerShell实例中运行了第一个脚本,它似乎将运行空间隔离得足以让两个函数都能正常运行:

$BasePath = 'Z:\scripts\Import-Data'

powershell.exe -NoProfile -command "& '$BasePath\fetch-attachments.ps1'"
& "$BasePath\process-attachments.ps1"

不完全是一个优雅的解决方案,但它让我超越了我遇到的问题......