【问题标题】:Execute file from Powershell without getting "Do you want to run this file?" dialog从 Powershell 执行文件而不会出现“你想运行这个文件吗?”对话
【发布时间】:2010-12-01 05:49:10
【问题描述】:

我正在遍历目录中的 .exe 文件并提取 .msp 文件。
理想情况下,它会悄无声息地发生。


这个批处理文件命令完美运行。

for %%g in ("C:\test\"*.exe) do %%g /quiet /extract:"C:\test"


这个 powershell 脚本几乎可以完成。

$exeFiles = Get-ChildItem -path $directory -recurse -include *.exe
foreach($file in $exeFiles) 
{ 
    $appArgs = '/quiet /extract:"' + $directory + '"'
    Start-Process $exeFiles $appArgs -PassThru | Wait-Process
}


但是,Windows 7 抛出“你想运行这个文件吗?”对话框。
如何让 powershell 真正静音?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    不确定这是否是您的问题,但您是在 $exeFiles 变量上调用 Start-Process 而不是

    for ($file in $exeFiles)
    {
        start-process $file (...etc)
    }
    

    您还将 args 作为字符串传递,所以我怀疑它们没有通过 exe。如果您将参数传递给 start-process,它们必须采用数组的形式,数组中的每个元素一个字符串。不仅如此,powershell 使用 $args 并且它似乎是不可变的,所以你需要一个不同的变量名:

    所以你的代码应该看起来更像这样:

    $directory = "C:\test"
    $exeFiles = Get-ChildItem -path $directory -recurse -include *.exe
    foreach($file in $exefiles) 
    { 
        $myArgs = '/quiet', ('/extract:"' + $directory + '"')
        Start-Process $file $myArgs -PassThru | Wait-Process
    }
    

    【讨论】:

    • 嗨卡拉维拉。感谢您的回复。在尝试简化问题的代码时,变量名称是拼写错误。他们已经修好了。谢谢。至于将参数作为字符串传递,它实际上工作得很好。我认为我遇到的问题是尝试在网络驱动器上提取文件时的安全问题。现在进一步研究。
    【解决方案2】:

    您遇到的问题是机器与获取文件的资源之间的信任关系。如果两台机器属于同一个域,您不应该看到此对话框。 如果它们不在域中(即内部网或外联网),请转到:控制面板-> Internet 选项-> 安全-> 本地内部网-> 站点 点击“添加”,输入您要信任的资源

    文件://服务器名.域名

    单击确定,然后重试。 我个人正在尝试通过 WMI 来做到这一点,有人知道怎么做吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 2015-02-18
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多