从Powershell在脚本块中使用参数启动CMD.exe?

例外

这可能吗?

我一直在尝试一些简单的事情:

Start-Process -FilePath "C:\Windows\System32\cmd.exe" -verb runas -ArgumentList {echo hello1}

CMD以管理员身份启动,但此后没有任何反应。

长话大说,当我想使用“ Remove-Item”时,我不想使用-Recurse参数,因为它会由于各种原因而引发拒绝访问错误。我知道如何在没有任何提示的情况下执行此操作的唯一方法是在命令提示窗口中使用rmdir。

有谁知道一种方法来抑制不带-recurse的提示,或者如何启动CMD并使用其所有参数调用rmdir?

mklement0

Paul G的答案根据您问题中的示例命令解决了您眼前的问题,并有益地指出了/c必须在传递给任何命令之前cmd.exe(或者/k,如果您希望保持会话打开)。

虽然使用脚本块Start-Process-ArgumentList参数就可以方便,你应该知道它的局限性

  • 脚本块的文字内容变为传递给单个字符串参数-ArgumentList

  • 因此,使用脚本块会阻止将PowerShell变量和表达式用作要传递的参数(的一部分)。

因此,如果要通过变量传递目标目录路径,则需要做更多的工作

$targetDir = 'c:\foo\bar' 
Start-Process -Wait -FilePath cmd -Verb RunAs -ArgumentList '/c', 
  'echo', 'rmdir', '/s', "`"$targetDir`""

请注意,我已经添加echo,以预览rmdir命令-删除它来执行实际删除。

注意使用嵌入式双引号$targetDir,但是,由于一个已知的bug,不幸的是,使用双引号可以正确地传递带有嵌入式空格的参数

还要注意该-Wait开关,该开关可确保在提升的进程退出之前命令不会返回-尽管它本身并不能保证成功完成,您必须随后进行检查。

你可以添加-WindowStyle Hidden到隐形运行高架控制台窗口本身,但要注意,UAC对话框(以确认高程)显然还是会显示-除非你的PowerShell会话已经升高。


至于:

当我要使用时,Remove-Item我不想使用该-Recurse参数,因为由于各种原因它会引发拒绝访问错误。

为了删除Remove-Item包含以下内容的整个目录-包括其所有内容,包括子目录-您必须使用-Recurse

您可以强制进行某些删除而不会提出投诉-Force(例如标记为只读的文件),但是缺少所需权限的删除尝试将永远不会成功。

虽然可以抑制相关的错误信息-ErrorAction SilentlyContinue,在问题的项目将不会被删除,运行代码升高可能会再次成为你唯一的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章