繁体   English   中英

使用 PowerShell 使用 .bat 文件在 Windows 上安装 Chrome

[英]Install Chrome on Windows with a .bat file using PowerShell

我四处寻找并找到了一些提示,但缺少一些细节。 这是我所拥有的:

安装-chrome.bat

PowerShell -NoProfile -Command "&{Start-Process PowerShell -ArgumentList '-NoProfile -File install-chrome.ps1' -Verb RunAs}"

安装-chrome.ps1

$client = New-Object System.Net.WebClient;
$client.DownloadFile("https://dl.google.com/chrome/install/ChromeStandaloneSetup64.exe", ".\ChromeStandaloneSetup64.exe");

.\ChromeStandaloneSetup64.exe /silent /install ;

有两件事没有按预期工作:

  1. 即使我发现的帖子指出上述内容应该在管理员模式下启动 PowerShell,我仍然会收到一个 UAC 弹出窗口。
  2. 我期待.\\会将.exe下载到.ps1.bat脚本所在的目录。

有关如何解决此问题的任何提示?

编辑:感谢@TheIncorrigible1 的回复,我设法解决了第二部分。 当我直接在 PowerShell 中执行它们时,这两个选项或多或少都有效(它会下载它,但安装会在本地引发错误):

< V3

$PSScriptRoot = Split-Path -Parent -Path $script:MyInvocation.MyCommand.Path
$uri = "https://dl.google.com/chrome/install/ChromeStandaloneSetup64.exe"
$path = "$PSScriptRoot\ChromeStandaloneSetup64.exe" 

$client = New-Object System.Net.WebClient
$client.DownloadFile($uri, $path)
& $path /install

V3+

$uri = "https://dl.google.com/chrome/install/ChromeStandaloneSetup64.exe"
$path = "$PSScriptRoot\ChromeStandaloneSetup64.exe" 
Invoke-WebRequest -Uri $uri -OutFile $path
& $path /install

但是批处理仍然抛出错误:

At line:1 char:62
+ ... tart-Process PowerShell -Verb RunAs -ArgumentList -NoProfile, -File,  ...
+                                                                 ~
Missing argument in parameter list.
At line:1 char:69
+ ... ocess PowerShell -Verb RunAs -ArgumentList -NoProfile, -File, 'C:\Pro ...
+                                                                 ~
Missing argument in parameter list.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingArgument

两件事情-

您不需要将批处理命令包装到脚本块中的 powershell 中,并且-ArgumentList需要一个字符串参数数组:

powershell.exe -NoProfile -Command "Start-Process -FilePath powershell.exe -ArgumentList @('-NoProfile', '-File', '%~dp0install-chrome.ps1') -Verb RunAs"

有一个自动变量$PSScriptRoot来确定您的根目录在哪里:

$uri = 'https://dl.google.com/chrome/install/ChromeStandaloneSetup64.exe'
if (-not $PSScriptRoot) {
    $PSScriptRoot = Split-Path -Parent -Path $script:MyInvocation.MyCommand.Definition
}
$outFile = "$PSScriptRoot\ChromeStandaloneSetup64.exe"

if ($PSVersionTable.PSVersion.Major -lt 3) {
    (New-Object -TypeName System.Net.WebClient).DownloadFile($uri, $outFile)
}
else {
    Invoke-WebRequest -Uri $uri -OutFile $outFile
}

& $outFile /silent /install

干得好:

$Path = $env:TEMP; $Installer = "chrome_installer.exe"; Invoke-WebRequest "http://dl.google.com/chrome/install/375.126/chrome_installer.exe" -OutFile $Path\$Installer; Start-Process -FilePath $Path\$Installer -Args "/silent /install" -Verb RunAs -Wait; Remove-Item $Path\$Installer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM