【问题标题】:PowerShell .ps1 script file is deleted when run from CMD从 CMD 运行时删除 PowerShell .ps1 脚本文件
【发布时间】:2019-01-23 17:15:22
【问题描述】:

当我从 Command Prompt Window 执行一个 powershell 脚本文件时,该文件就消失了。 CMD 窗口不显示任何错误消息,它只是在执行命令后立即转到下一行。我从备份中恢复文件。

当我从 Power Shell Window 执行 powershell 脚本文件时,该过程成功完成。

当我尝试使用 Execute Process Task in SSIS 时,我最初注意到该文件已消失,如 SQL Server Central: execute+process+taskMSDN Blog Article: run-powershell-scripts-in-ssis 上的帖子所示。

文件消失的原因是什么?

.PS1 文件刷新带有数据连接的 excel 文件并保存文件。


Power Shell,命令测试(只有第一个失败,其他 3 个有效)

PS H:\> "PowerShell.exe" "-F C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1"
Unexpected token '-F C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1' in expression
 statement.
At line:1 char:103
+ "PowerShell.exe" "-F C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1" <<<<
    + CategoryInfo          : ParserError: (-F C:\SVN\Busin...xcelRefresh.ps1:String) [], ParentContainsErrorRecordEx
   eption
    + FullyQualifiedErrorId : UnexpectedToken

PS H:\> powershell -noexit C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1
PS H:\> PowerShell.exe -F C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1
PS H:\> PowerShell.exe -File C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1
PS H:\>

命令提示符,命令测试(文件消失)

PowerShell.exe -File C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1

PowerShell_Exec_FileDisappears.png

【问题讨论】:

  • 这是(自然)不正常的行为。它必须与脚本中发生的事情有关。我们不能不看就知道。可能是你的杀毒软件把它删了?
  • @marsze - 怎么可能是脚本?当在 Powershell 中手动输入行时,scripts 运行良好。 PS1 脚本文件 在通过 powershell 运行时运行良好。 PS1 脚本文件 通过命令行运行时执行是唯一的问题...文件被删除。感谢您对防病毒的想法;有什么方法可以调查这种可能性吗?我们的组织使用卡巴斯基进行杀毒。
  • 验证非常简单:您是否尝试将脚本的内容更改为简单的内容,例如 echo 命令,然后再试一次?我想它不应该被删除。您可以使用该技术来缩小问题范围。
  • 您是否尝试过其他脚本名称/路径等?尝试缩小问题的范围。我无法真正提供帮助,因为我无法重现此内容。
  • 我现在可以重现它了。它似乎与文件名中的点有关(来自“.xlsx”)。有趣的是,如果你去掉这个点,它就会起作用。更有趣的是:如果将“.xlsx”替换为“.ps1”inside 文件名,它也可以工作。这似乎几乎是 PowerShell 或 CMD 中的错误。我会进一步调查。

标签: powershell cmd


【解决方案1】:

这很奇怪。我能够重现它。但我无法解释为什么会发生这种情况。我的猜测是,这在某种程度上是调用 PowerShell 运行脚本时解析路径的优化错误。当你从 inside PowerShell 中调用它时,你甚至会遇到同样的问题,例如这样调用它时:

. "powershell.exe" -File C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1
# or
Start-Process "powershell" -Arg "-File", "C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1"

我可以给你一些指示,但哪些替代方案应该起作用:

最简单:删除或替换点!

powershell -File "C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats_xlsx_ExcelRefresh.ps1"

或者,这些变体也应该有效:

# Pass a command which calls the script using the call operator (&)
# Note: The single quotes are necessary! Else you will have the same behavior
powershell -Command "& 'C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1'"

# A workaround to avoid the issue that's probably causing this.
# The semicolon basically puts an empty command at the beginning.
# This supports my theory, that this is somehow an optimization bug.
powershell -Command ";& C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1"

# Base64-encoded version of
# "& C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_UsageStats.xlsx_ExcelRefresh.ps1"
powershell -EncodedCommand "JgAgAEMAOgBcAFMAVgBOAFwAQgB1AHMAaQBuAGUAcwBzAEEAbgBhAGwAeQBzAHQAcwBcAEUAeABjAGUAbABUAG8AbwBsAHMAXABEAGEAdABhAGIAYQBzAGUAUwBTAEEAUwBfAFUAcwBhAGcAZQBTAHQAYQB0AHMALgB4AGwAcwB4AF8ARQB4AGMAZQBsAFIAZQBmAHIAZQBzAGgALgBwAHMAMQA="

我就此向 Microsoft 写了一些反馈,但我建议您对此进行进一步调查,并可能向 PowerShell 团队写一份错误报告。

【讨论】:

    【解决方案2】:

    对不起,如果我很傻,但我遇到了类似的问题。

    就我而言,卡巴斯基防病毒软件正在删除脚本以进行隔离。在另一台计算机上预装 McAfee 时也发生了同样的情况。

    在这两种情况下,我都可以通过将 PowerShell 脚本添加为“受信任的应用程序”来解决它。

    触发防病毒的行是:

        Start-Process -FilePath PowerShell.exe -ArgumentList ('-File', $PSCommandPath, '-NoExit', '-NoProfile') -Verb Runas
    

    一开始我没有注意到Kaspersky's notifications.

    然后我尝试将脚本注册为排除项,但没有按预期工作。所以卡巴斯基开始asking for desinfect.

    【讨论】:

    • 不知何故 -NoExit 标志引发了这个问题。如果我删除它,它会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多