自删除PowerShell脚本删除所有内容,但不删除包含/父文件夹



我正在尝试让PowerShell 5.1脚本自行删除,以及整个文件夹内容(包括子文件夹(。我正在使用下面的代码,它在一定程度上起作用。它确实删除了文件夹的所有内容(包括PowerShell脚本(,但它确实NOT删除了文件夹本身。

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}

最新更新