1

我正在尝试让 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

4

2 回答 2

2

我想出了解决方案。我尝试了使用Start-Process,它完全创建了一个单独的过程。我还发现不要将-NoNewWindowswitch 与它一起使用,否则我会得到与 with 相同的结果Invoke-Expression

以下代码有效,删除了整个文件夹内容和文件夹本身:

Start-Process -FilePath "cmd.exe" -ArgumentList "/c `"cd c:\ & rmdir C:\test /s /q`""
于 2021-04-05T12:13:12.903 回答
0

我假设该文件script.ps1位于c:\test应该删除的路径中 - 只要脚本正在运行,该文件夹就在使用中。因此,我会在脚本的最后创建一个 PowerShell 作业,等待几秒钟,然后删除该文件夹。

Start-Job -Name RemoveFolder -ScriptBlock {Start-Sleep 2;Remove-Item -LiteralPath 'C:\test' -Force -Recurse}
于 2021-04-05T04:51:26.377 回答