【问题标题】:Error: "the term is not recognised as the name of a cmdlet"错误:“该术语未被识别为 cmdlet 的名称”
【发布时间】:2015-05-28 14:59:23
【问题描述】:

我已经编写了一个基本脚本来执行和发送带有附件的电子邮件,我已经在 PowerShell 中对此进行了测试。但是,当我尝试将其创建为任务计划程序时,出现以下错误:

但是,我完全相同的代码在 PowerShell 中执行没有问题。

这是我在任务调度器中的视图:

我错过了什么?我已经设置了执行策略,所以这不是问题,我已经测试了我的代码并且没有问题。

【问题讨论】:

  • 嗨,我重命名了我的文件夹 powershell 脚本,没有空格,这解决了问题。但是我不明白,因为我相信带有“”的 & 意味着这不是问题?

标签: powershell scheduled-tasks


【解决方案1】:

改用-File 参数:

-File "C:\path\to\your.ps1"

PowerShell 的调用运算符 (&) 仅在 PowerShell 中有效,因此您需要将其放在参数字符串中:

"& 'C:\path\to\your.ps1'"

虽然这也可行,但它有一些缺点,最重要的是它只会返回 0(成功)或 1(失败)作为退出代码,而不是脚本的实际退出代码。

【讨论】:

    【解决方案2】:

    您的参数需要包含-Command 参数,而不仅仅是您要运行的代码。此外,您要运行的代码必须是字符串,而不是原始 Powershell 代码,否则命令行会尝试解释它。将参数设置为:

    -Command '&"C:\Users\Martyn\Documents\Powershell Scripts\Working.ps1"'
    

    或者,您可以直接尝试-File 参数,尽管它存在已知问题:

    -File "C:\Users\Martyn\Documents\Powershell Scripts\Working.ps1"
    

    【讨论】:

      【解决方案3】:

      如果其他人收到此错误,您需要先将ProcessMitigation 安装到 PowerShell 中,然后才能使用它。默认情况下,它不存在。

      安装步骤:

      • 以管理权限运行 Powershell。
      • 在PS中运行Save-Module -Name ProcessMitigations -Path <path>命令下载组件。提供实际路径而不是下载。
      • 在 PS 中运行Install-Module -Name ProcessMitigations 进行安装。

      更多here.

      【讨论】:

        猜你喜欢
        • 2019-10-12
        • 2017-12-11
        • 2021-12-09
        • 2020-02-25
        • 2020-04-17
        • 2018-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多