簡體   English   中英

自刪除 PowerShell 腳本刪除所有內容,但不刪除包含/父文件夾

[英]Self-deleting PowerShell script deletes all contents but not the containing/parent folder

我正在嘗試讓 PowerShell 5.1 腳本自行刪除,以及整個文件夾內容(包括子文件夾)。 我正在使用下面的代碼,這在一定程度上是有效的。 它會刪除文件夾的所有內容(包括 PowerShell 腳本),但不會刪除文件夾本身。

script.ps1

# Main code

# At end of script
Invoke-Expression -Command "cmd.exe /c rmdir `"C:\test`" /s /q"

運行上述代碼后, C:\test仍然存在,但為空。 我怎樣才能讓腳本也刪除文件夾?

附加說明

我也嘗試在腳本末尾使用Remove-Item -Path "C:\test" -Force -Recurse ,但它會產生以下錯誤:
Remove-Item: Cannot remove the item at 'C:\test' because it is in use.

我發現使用Remove-Item刪除腳本本身時這是一個已知問題

我想出了解決方案。 我嘗試改用Start-Process ,它完全創建了一個單獨的進程。 我還發現不要使用-NoNewWindow開關,否則我會得到與Invoke-Expression相同的結果。

以下代碼有效,刪除了整個文件夾內容和文件夾本身:

Start-Process -FilePath "cmd.exe" -ArgumentList "/c `"cd c:\ & rmdir C:\test /s /q`""

我假設文件script.ps1位於路徑c:\test應該被刪除 - 只要腳本正在運行,文件夾就在使用中。 因此,我會在腳本的最后創建一個 PowerShell 作業,等待幾秒鍾,然后刪除該文件夾。

Start-Job -Name RemoveFolder -ScriptBlock {Start-Sleep 2;Remove-Item -LiteralPath 'C:\test' -Force -Recurse}

暫無
暫無

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

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