2

我无法发布所有脚本内容,但基本思想是它下载 JSON 并使用ConvertFrom-Jsoncmdlet 将其转换为对象。一些对象被过滤掉,其余的被写入 XML/XLS 文档(Excel 2003 格式)。然后将该文件附加到电子邮件中并发送给不同的人。

我遇到的问题是它仅在从 Powershell ISE 运行时才有效。一旦我尝试设置一个计划任务,从 cmd 调用它,甚至从 powershell 调用它,附加的文件就完全是空的。就好像某些函数没有运行(循环并创建所有行的函数)。

我暂时可以继续从 ISE 运行,但此脚本的想法是发送一封无需干预的自动电子邮件。关于可能导致这种情况的任何想法?

4

5 回答 5

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

于 2014-10-30T08:58:41.990 回答
2

根据对原始帖子的评论的回答,该脚本似乎(出乎意料?)在 ISE 中工作,因为允许在 ISE 中运行的脚本了解控制台中使用的变量的错误/怪癖/功能窗口,反之亦然。

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

避免此问题的方法:

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

http://powershell.com/cs/blogs/tips/archive/2015/02/12/getting-a-clean-powershell-environment.aspx

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

  • 在您的脚本中使用Set-StrictMode 2来捕获未定义的变量等。

https://technet.microsoft.com/en-us/library/hh849692.aspx

Set-StrictMode -Version 2.0

  • 禁止引用未初始化的变量(包括字符串中的未初始化变量)。
  • 禁止引用对象不存在的属性。
  • 禁止使用调用方法的语法的函数调用。
  • 禁止没有名称的变量 (${})。
于 2016-01-22T17:31:39.313 回答
1

我遇到了这个问题,并且我使用 powershell 中的单线程函数执行脚本。您也可以尝试其他一些选项,转到此链接以查找更多信息。

例子

powershell.exe -noexit c:\test.ps1 -sta
于 2013-04-02T09:15:17.600 回答
1

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

function global:mycall{}
于 2019-02-10T03:53:18.640 回答
0

开始你的脚本:

[cmdletbinding()]
于 2020-04-09T18:56:00.473 回答