[英]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.