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
好的,所以我正在致力于将软件远程部署到 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