Start-process: 既有位置参数又无法定位指定的文件

Start-process: both positional parameter and can't locate file specified

好的,所以我正在致力于将软件远程部署到 ADUsers。 我可以远程访问计算机,没有任何问题。

现在我从 Ninite 获得了一个 exe 文件,只需将 7zip 安装到客户端 pc 上,看看它何时工作,这样我就可以开始向它部署一些更大的程序。

我找到的帮助我部署软件的指南现在如下所示:

Invoke-Command -ComputerName *REDACTED* -Scriptblock {
    Start-Process C:\Users\Administrator\Documents\ninite_7_zip\Ninite 7Zip Installer.exe '/silent' -wait
}

当我执行 运行 这段代码时,出现错误:

A positional parameter cannot be found that accepts argument 'Installer.exe'.

所以我心想,这可能是因为名称中的空格。因此,我将其更改为:

Invoke-Command -ComputerName *REDACTED* -Scriptblock {
        Start-Process C:\Users\Administrator\Documents\ninite_7_zip\Ninite_7Zip_Installer.exe '/silent' -wait
    }

当然还更改了它在文件夹中的名称以匹配“新制作的”代码。

但是错误现在变成了:

This command cannot be run due to the error: The system cannot find the file specified

尽管我使用 Powershell ISE,并且在编写时使用它的引导框,但在编写目录时进入文件夹并找到它。

我的唯一目标是,当从文件所在的 DC 部署时,我想远程 运行 并在客户端 PC 上完成此安装程序。

有人猜对了吗?甚至可能是一个解决方案。

提前感谢您的热心回答。

When I do run this code, I get the error:

A positional parameter cannot be found that accepts argument 'Installer.exe'.

您需要使用引号来限定包含空格的路径名:

Start-Process 'C:\Users\Administrator\Documents\ninite_7_zip\Ninite 7Zip Installer.exe' '/silent' -wait

But the error now changed into:

This command cannot be run due to the error: The system cannot find the file specified

尽管我使用 Powershell ISE,并且在编写时使用它的引导框,但在编写目录时进入文件夹并找到它。

ISE 不够智能,无法意识到脚本块将在远程计算机上执行,因此它根据您的本地文件系统.[=14= 完成路径]

您仍然需要将可执行文件复制到远程计算机才能执行它:

# first copy the installer to remote file system
$remoteSession  = New-PSSession -ComputerName $computerName
$localInstaller = 'C:\Users\Administrator\Documents\ninite_7_zip\Ninite 7Zip Installer.exe'
$remotePath     = Invoke-Command -Session $remoteSession -ScriptBlock { $env:TEMP }
Copy-Item $localInstaller -Destination (Join-Path $remotePath "7zInstaller.exe") -ToSession $remoteSession

# now we can invoke the executable on the remote machine (re-using the same remoting session)
Invoke-Command -Session $remoteSession -ScriptBlock {
  Start-Process (Join-Path $env:TEMP "7zInstaller.exe") '/silent' -Wait
}

# clean up
$remoteSession |Remove-PSSession |Out-Null