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

问题描述 投票:1回答:4

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

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

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

powershell cmd scheduled-tasks powershell-v3.0 powershell-ise
4个回答
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下的此链接


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

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

1
投票

我有这个问题是为了我使用powershell工作的单线程函数执行脚本。您还可以尝试其他选项,请访问此qazxsw poi以查找更多信息。

link

1
投票

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

powershell.exe -noexit c:\test.ps1 -sta
© www.soinside.com 2019 - 2024. All rights reserved.