gpt4 book ai didi

powershell - 从Powershell从脚本 block 中的参数启动CMD.exe吗?

转载 作者:行者123 更新时间:2023-12-01 08:22:12 25 4
gpt4 key购买 nike

这可能吗?

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

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

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

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

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

最佳答案

Paul G's answer根据问题中的示例命令解决了您的紧迫问题,并指出 /c必须先于任何命令传递给cmd.exe (如果要保持 session 打开,则传递给/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周围使用了嵌入式双引号,不幸的是,由于
    一个known bug

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

    您可以添加-WindowStyle Hidden来以不可见的方式运行提升后的控制台窗口,但是请注意,UAC对话框(用于确认提升)显然仍会显示-除非您的PowerShell session 已经提升。

    至于:

    When I want to use Remove-Item I do not want to use the -Recurse argument because it will throw access denied errors for various reasons.



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

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

    尽管您可以使用-ErrorAction SilentlyContinue抑制相关的错误消息,但不会删除问题中的项目,并且运行提升的代码可能再次是您的唯一选择。

    关于powershell - 从Powershell从脚本 block 中的参数启动CMD.exe吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52825281/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com