簡體   English   中英

從 CMD 運行時,PowerShell .ps1 腳本文件被刪除

[英]PowerShell .ps1 script file is deleted when run from CMD

當我從Command Prompt Window執行 powershell 腳本文件時,該文件就消失了。 CMD 窗口不顯示任何錯誤消息,它只是在執行命令后立即轉到下一行。 我從備份中恢復文件。

當我從Power Shell Window執行 powershell 腳本文件時,該過程成功完成。

當我嘗試Execute Process Task in SSIS使用Execute Process Task in SSIS時,我最初注意到該文件消失了,如SQL Server Central上發布的:execute+process+taskMSDN 博客文章: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

在此處輸入圖片說明

這更奇怪。 我能夠重現它。 但我無法解釋為什么會發生這種情況。 我的猜測是,這在某種程度上是調用 PowerShell 運行腳本時路徑解析中的一個優化錯誤。 從 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 團隊寫一份錯誤報告。

對不起,如果我很傻,但我有類似的問題。

在我的情況下,卡巴斯基防病毒軟件正在刪除腳本以隔離。 在另一台計算機中預裝 McAfee 也發生了同樣的事情。

在這兩種情況下,我都能夠通過將 PowerShell 腳本添加為“受信任的應用程序”來解決它。

觸發防病毒程序的行是:

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

起初我沒有注意到卡巴斯基的通知。

然后我嘗試將腳本注冊為排除項,但沒有按預期工作。 所以卡巴斯基開始要求消毒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM