这可能吗?
我一直在尝试简单的事情:
Start-Process -FilePath "C:\Windows\System32\cmd.exe" -verb runas -ArgumentList {echo hello1}
CMD以管理员身份启动,但此后没有任何反应。
长话来说,当我想使用“ Remove-Item”时,我不想使用-Recurse参数,因为它会由于各种原因而引发访问被拒绝的错误。我唯一不知道怎么做的方法是在命令提示符窗口中使用rmdir。
有人知道不使用-recurse抑制提示的方法,还是我如何启动CMD并使用所有参数调用rmdir的方法?
答案 0 :(得分:4)
您几乎掌握了全部内容。只需在参数列表的开头添加/c
或/k
。
/c
-运行命令后关闭命令提示符
/k
-保持命令提示符打开
Start-Process -FilePath "C:\Windows\System32\cmd.exe" -verb runas -ArgumentList {/c echo hello1}
答案 1 :(得分:3)
Paul G's answer根据问题中的示例命令解决了您的紧迫问题,并指出 /c
必须先于任何命令传递给cmd.exe
(或/k
(如果要保持会话打开)。
虽然很方便地使用带有Start-Process
的{{1}}参数的脚本块,但您应该知道其限制:
脚本块的文字内容变为单个字符串参数,并传递给-ArgumentList
。
因此,使用脚本块会阻止使用PowerShell变量和表达式作为要传递的参数的一部分。
因此,如果要通过变量 传递目标目录路径,则需要做更多的工作:
-ArgumentList
请注意,我添加了$targetDir = 'c:\foo\bar'
Start-Process -Wait -FilePath cmd -Verb RunAs -ArgumentList '/c',
'echo', 'rmdir', '/s', "`"$targetDir`""
,以便对echo
命令进行预览-将其删除以执行实际的删除操作。
请注意在rmdir
周围使用 embedded 双引号,不幸的是,由于
known bug。
还要注意$targetDir
开关,可确保在提升的进程退出之前命令不会返回-尽管它本身不能保证成功完成 以后必须检查。
您可以添加-Wait
以不可见地运行提升的控制台窗口,但请注意,UAC对话框(用于确认提升)显然仍会显示-除非您的PowerShell会话已经提升
至:
当我想使用
-WindowStyle Hidden
时,我不想使用Remove-Item
参数,因为它会由于各种原因而引发拒绝访问错误。
要删除包含-Recurse
的整个目录-包括其所有内容,包括子目录,您必须使用Remove-Item
。
您可以强制进行{em>某些删除,而不会出现-Recurse
的投诉(例如标记为只读的文件),但是删除缺少必需的权限永远不会成功。
虽然您可以使用-Force
取消关联的错误消息,但问题中的项目不会被删除,并且运行代码升高可能会再次您唯一的选择。