我不能发布所有的脚本contenet,但基本的想法是它下载JSON并使用ConvertFrom-Json
cmdlet将其转换为对象。过滤掉一些对象,其余对象写入XML / XLS文档(Excel 2003格式)。然后将此文件附加到电子邮件中并发送给各个人。
我遇到的问题是它只能在从Powershell ISE运行时才能运行。一旦我尝试设置计划任务,从cmd调用它,或者甚至从powershell调用它,附加文件就完全是空的。就好像某些函数不运行(循环并创建所有行)。
我可以暂时继续从ISE运行,但是这个脚本的想法是发送一个不需要干预的自动电子邮件。关于可能导致这种情况的任何想法?
你需要运行脚本“dot sourced”,这可以这样做
powershell.exe -noexit -file c:\test.ps1
要么
pwershell.exe -noexit ". c:\test.ps1"
请参阅-File部分http://technet.microsoft.com/en-us/library/hh847736.aspx下的此链接
根据评论到原帖的回答,似乎脚本(意外地?)在ISE中工作,因为bug / quirk / feature允许在ISE中运行的脚本知道控制台中使用的变量窗口,反之亦然。
当脚本使用已定义的变量运行(并且未在脚本中仔细初始化)时,这通常会导致逻辑问题或意外结果。
如何避免这个问题:
http://powershell.com/cs/blogs/tips/archive/2015/02/12/getting-a-clean-powershell-environment.aspx
要确保脚本在完全干净的测试环境中运行,您当然可以重新启动PowerShell ISE。更方便的方法是打开另一个PowerShell选项卡:在PowerShell ISE中,选择“文件”/“新建PowerShell”选项卡。
Set-StrictMode 2
来捕获未定义的变量等。https://technet.microsoft.com/en-us/library/hh849692.aspx
Set-StrictMode -Version 2.0
- 禁止引用未初始化的变量(包括字符串中未初始化的变量)。
- 禁止引用对象的不存在的属性。
- 禁止使用语法调用方法的函数调用。
- 禁止没有名称的变量($ {})。
将缺失的变量或函数更改为全局。
powershell.exe -noexit c:\test.ps1 -sta