对于如何使用PSSession
将此EXE推送到远程PC上,我已经进行了大量研究,当逐行执行时,所有代码行都可以工作。但是我很难将其放入一个有意义的函数中,它将执行所有代码行,并且只需按一下按钮就可以成功安装该软件。不知道发生了什么。当我尝试将所有代码行放入函数中并运行它时,它将在本地安装exe。能否请您指导我做错了什么?抱歉,我是Powershell的新手。
$dc1 = New-PSSession -ComputerName DC1
Copy-Item C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe -Destination C:\TPAdmin -ToSession $dc1
Enter-PSSession -Session $dc1
Invoke-Command -ScriptBlock {C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe /VERYSILENT /LOG="C:\SOFTWAREINSTALL.LOG"
Remove-Pssession $dc1
答案 0 :(得分:0)
至于……
对不起,我是Powershell的新手。
...很好,因为我们所有人都必须从某个地方开始。但是...这里有几件事:
请务必设置您的帖子格式,以鼓励人们愿意 救命。人们不赞成这样做。必须复制,粘贴并 重新格式化您的帖子很好,不需要其他多余的工作。 ;-} 。我们去过那里。
我们不知道您如何在PowerShell上快速入门,但是 使用免费的资源来限制/避免所有 误解,沮丧,错误,潜在的不良习惯等, 你将要遇到的。继续观看以下视频:
回到您的用例。你不说发生了什么事。所以,您让我们猜测。这实际上对您没有潜在的帮助。
尽管如此,您只需要在PowerShell v5x中执行此操作,因为它需要使用-ToSession参数。
$DC1 = New-PSSession -ComputerName 'DC1'
Copy-Item -ToSession $DC1 -Path 'C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe' -Destination 'C:\TPAdmin'
Invoke-Command -Session $DC1 -ScriptBlock {C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe /VERYSILENT /LOG="C:\SOFTWAREINSTALL.LOG"}
Remove-PSSession -Session $DC1
我不确定您为什么要在Enter-PSSsssion命令中执行New-PSSession,因为它不是必需的。用于独立的交互式会话。
Explicit PSRemoting = Enter=PSSEssion
Implicit PSREmoting = New-PSSEssion
如果通过会话在副本上对您来说所有其他操作都失败了,那么只需使用普通的UNC方式即可从源复制到目标。
Copy-Item -Path 'C:\temp\Results.csv' -Destination "\\$($DC1.Computername)\c$\temp"
答案 1 :(得分:0)
Enter-PSSession
仅用于 interactive ,因此不适合用于 function 。 [1]
将您使用Enter-PSSession
创建的会话传递给New-Session
命令的Invoke-Command
参数,而不是使用-Session
该命令(在远程会话中)。
# Define your function...
function Invoke-InstallerRemotely {
param([string] $ComputerName)
$session = New-PSSession -ComputerName $ComputerName
Copy-Item C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe -Destination C:\TPAdmin -ToSession $session
# Do NOT use Enter-PSSession.
# Pass your session to Invoke-Command with -Session
Invoke-Command -Session $session -ScriptBlock {C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe /VERYSILENT /LOG="C:\SOFTWAREINSTALL.LOG"
Remove-PSSession $session
}
# ... then invoke it.
# Note that functions must be defined *before* they're called.
Invoke-InstallerRemotely -ComputerName DC1
[1]在功能中使用它意味着已输入目标计算机上的交互式会话,您必须以交互方式退出(通过键入和提交) exit
或Exit-PSSession
),然后再次在本地执行 。