我的PowerShell脚本仅在从ISE运行时有效
我无法发布所有脚本contenet,但基本思想是它下载JSON并使用我的PowerShell脚本仅在从ISE运行时有效,powershell,cmd,scheduled-tasks,powershell-3.0,powershell-ise,Powershell,Cmd,Scheduled Tasks,Powershell 3.0,Powershell Ise,我无法发布所有脚本contenet,但基本思想是它下载JSON并使用ConvertFrom-JSONcmdlet将其转换为对象。一些对象被过滤掉,其余的被写入XML/XLS文档(Excel 2003格式)。然后,该文件会附加到电子邮件中,并发送给不同的人 我遇到的问题是,它只有在从Powershell ISE运行时才起作用。一旦我尝试设置一个计划任务,从cmd调用它,甚至从powershell调用它,附加的文件就完全是空的。就好像有些函数没有运行一样(循环并创建所有行的函数) 我暂时可以继续从I
ConvertFrom-JSON
cmdlet将其转换为对象。一些对象被过滤掉,其余的被写入XML/XLS文档(Excel 2003格式)。然后,该文件会附加到电子邮件中,并发送给不同的人
我遇到的问题是,它只有在从Powershell ISE运行时才起作用。一旦我尝试设置一个计划任务,从cmd调用它,甚至从powershell调用它,附加的文件就完全是空的。就好像有些函数没有运行一样(循环并创建所有行的函数)
我暂时可以继续从ISE运行,但是这个脚本的想法是发送一封自动电子邮件,不需要任何干预。关于是什么导致了这一问题,有什么想法吗?我遇到了这个问题,而且对于我来说,使用powershell中的单线程函数执行scrip是可行的。 您也可以尝试其他选项,转到此处查找更多信息 范例
powershell.exe -noexit c:\test.ps1 -sta
您需要运行脚本“dot-sourceed” 可以这样做吗
powershell.exe -noexit -file c:\test.ps1
或
请参阅-File部分下的此链接
根据对原始帖子评论的回答,脚本似乎(意外地?)在ISE中工作,因为存在缺陷/怪癖/功能,允许在ISE中运行的脚本了解控制台窗口中使用的变量,反之亦然 当脚本使用已定义的变量(并且未在脚本中仔细初始化)运行时,这通常会导致逻辑问题或意外结果 避免此问题的方法:
- 尝试在尽可能干净的环境中测试代码
- 在脚本中使用
,以捕获未定义的变量等设置StrictMode 2
设置严格模式-版本2.0
- 禁止引用未初始化的变量(包括字符串中的未初始化变量)
- 禁止引用对象的不存在属性
- 禁止使用用于调用方法的语法的函数调用
- 禁止没有名称(${})的变量
将缺少的变量或函数更改为全局
function global:mycall{}
从以下内容开始编写脚本:
[cmdletbinding()]
你需要弄清楚休息的地方。您的计划任务运行的是PoSH v2还是v3?你说“好像有些函数没有运行”——你需要测试一下!在每个函数中放入一条语句,并将其写入日志文件,表明该函数已输入。这里真的没有足够的东西让我们去诊断。在Windows事件日志中是否有任何内容?如果无法从Powershell调用它,请通过点源(../script.ps1)在本地作用域中运行它。这将使所有变量都驻留在会话中,您可以开始检查它们,看看它落在哪里。我能够让它工作。事实证明,我使用脚本后面定义的另一个变量定义了一个变量。移动它之后,它又开始工作了。谢谢请在你的答案中添加一些解释,以便其他人可以从中学习
[cmdletbinding()]