我在计算机上有一个计算机列表'。'。
我正在尝试在列表中的每个远程计算机名称上运行.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"
}
答案 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)
为什么你甚至想使用psexec
? PSRemoting
怎么样?
$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