Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的PowerShell脚本仅在从ISE运行时有效_Powershell_Cmd_Scheduled Tasks_Powershell 3.0_Powershell Ise - Fatal编程技术网

我的PowerShell脚本仅在从ISE运行时有效

我的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

我无法发布所有脚本contenet,但基本思想是它下载JSON并使用
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中运行的脚本了解控制台窗口中使用的变量,反之亦然

当脚本使用已定义的变量(并且未在脚本中仔细初始化)运行时,这通常会导致逻辑问题或意外结果

避免此问题的方法:

  • 尝试在尽可能干净的环境中测试代码

为了确保脚本在完全干净的测试环境中运行,您需要 当然可以重新启动PowerShell ISE。更方便的方法是 要打开另一个PowerShell选项卡:在PowerShell ISE中,选择文件/新建 PowerShell选项卡

  • 在脚本中使用
    设置StrictMode 2
    ,以捕获未定义的变量等

设置严格模式-版本2.0

  • 禁止引用未初始化的变量(包括字符串中的未初始化变量)
  • 禁止引用对象的不存在属性
  • 禁止使用用于调用方法的语法的函数调用
  • 禁止没有名称(${})的变量

将缺少的变量或函数更改为全局

function global:mycall{}

从以下内容开始编写脚本:

[cmdletbinding()]

你需要弄清楚休息的地方。您的计划任务运行的是PoSH v2还是v3?你说“好像有些函数没有运行”——你需要测试一下!在每个函数中放入一条语句,并将其写入日志文件,表明该函数已输入。这里真的没有足够的东西让我们去诊断。在Windows事件日志中是否有任何内容?如果无法从Powershell调用它,请通过点源(../script.ps1)在本地作用域中运行它。这将使所有变量都驻留在会话中,您可以开始检查它们,看看它落在哪里。我能够让它工作。事实证明,我使用脚本后面定义的另一个变量定义了一个变量。移动它之后,它又开始工作了。谢谢请在你的答案中添加一些解释,以便其他人可以从中学习
[cmdletbinding()]