如何在列表上运行命令并让PsExec或Powershell自动跳转到此列表中的下一个项目

时间:2017-11-10 22:17:20

标签: powershell psexec

我在计算机上有一个计算机列表'。'。

我正在尝试在列表中的每个远程计算机名称上运行.exe。我必须在每台正确安装.exe的计算机上执行.ps1脚本。在PsExec中,我必须在每个计算机名称之间的一分钟或两分之后按Enter键。这将通过远程计算机列表并运行每台计算机上的.exe。 在PowerShell中,只有第一台计算机运行.exe,其余计算机不执行任何操作。

当脚本运行时,是否有任何方法可以浏览列表而无需在计算机名称之间按Enter键?我希望这一切都能自动运行。

以下是我在PsExec中使用的内容。

psexec -s @C:\App\computers.txt cmd /c "Powershell Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass && PowerShell -noninteractive -file "C:\SpeedInstall.ps1""

以下是我在PowerShell中尝试的内容

$a = Get-Content "C:\App\computers.txt"
foreach($line in $a) {
psexec -s \\$line cmd /c "Powershell Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass && PowerShell -noninteractive -file C:\SpeedInstall.ps1"
}

2 个答案:

答案 0 :(得分:0)

您可以将/d开关与PSExec一起使用,使其不等待上一个命令完成,然后再转到下一个命令。有一个权衡,你不会看到命令可能生成的任何错误消息,但它可以让你更快地浏览你的列表。您的命令将如下所示:

$a = Get-Content "C:\App\computers.txt"
foreach($line in $a) {
  psexec -s -d \\$line cmd /c "Powershell Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass && PowerShell -noninteractive -file C:\SpeedInstall.ps1"
}

答案 1 :(得分:0)

为什么你甚至想使用psexecPSRemoting怎么样?

$Computers = Get-Content -Path C:\computers.txt

foreach ($Computer in $Computers) {
Copy-Item -Path C:\install.exe -Destination \\$Computer\c$\Windows\Temp\install.exe
}

$Script =
@"
# Write down your installation script here
& C:\install.exe /silent
Set-ItemProperty -Path HKLM:\SOFTWARE\Install -Name Setting -Value 1 -Type DWord
"@

$ScriptBlock = [Scriptblock]::Create($Script)


$PSSession = New-PSSession -ComputerName $Computers -SessionOption (New-PSSessionOption -NoMachineProfile)
Invoke-Command -Session $PSSession -ScriptBlock $ScriptBlock