我无法发布所有脚本contenet,但基本的想法是它下载JSON并使用ConvertFrom-Json
cmdlet将其转换为对象。过滤掉一些对象,其余对象写入XML / XLS文档(Excel 2003格式)。然后将此文件附加到电子邮件中并发送给各个人。
我遇到的问题是它只能在从Powershell ISE运行时才能运行。一旦我尝试设置计划任务,从cmd调用它,或者甚至从powershell调用它,附加文件就完全是空的。就好像某些函数没有运行(循环并创建所有行)。
我可以暂时继续从ISE运行,但是这个脚本的想法是发送一个不需要干预的自动电子邮件。关于可能导致这种情况的任何想法?
答案 0 :(得分:3)
你需要运行脚本" 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
答案 1 :(得分:2)
基于对原帖的评论的回答,似乎该脚本(意外地?)在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
- 禁止引用未初始化的变量(包括字符串中未初始化的变量)。
- 禁止引用对象的不存在的属性。
- 禁止使用调用方法语法的函数调用。
- 禁止没有名称的变量($ {})。
答案 2 :(得分:1)
我遇到过这个问题,而且我使用powershell工作的单线程函数来执行脚本。 您还可以尝试其他选项,转到此link以查找更多信息。
实施例
powershell.exe -noexit c:\test.ps1 -sta
答案 3 :(得分:1)
将丢失的变量或函数更改为全局。
function global:mycall{}
答案 4 :(得分:0)
使用以下命令启动脚本:
[cmdletbinding()]