2015-11-04 167 views
0

我正在使用powershell在多台服务器上尝试远程运行安装脚本,但已变得有点卡住了。在多台服务器上通过powershell运行bat文件

以下是我到目前为止。 Computers.txt包含我想要在其上运行安装的所有服务器的列表。这些全都坐在同一个域上。然后映射驱动器以浏览脚本所在的共享位置,然后运行安装脚本。

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

New-PSDrive –Name “S” –PSProvider FileSystem –Root “\\dc1-app01\apps” –Persist 

Start-Process -FilePath S:\createfile.bat 

我希望我失踪了很多,为了这个工作? bat文件本身非常复杂,因此目前我不想将其更改为powershell。

我从中运行的PC也是这些服务器上的受信任主机。

感谢您的投入,我是一个PowerShell新手

感谢

+1

有什么实际问题? – Sean

回答

1

我想你错过了通过服务器列表(阵列)运行在循环:

$VerbosePreference = 'Continue' 

$Computers = Get-Content -Path c:\temp\Computers.txt 

Foreach ($C in $Computers) { 

    Write-Verbose "Start batch file as a job on $C" 

    Invoke-Command -ComputerName $C -ScriptBlock { 
     New-PSDrive –Name 'S' –PSProvider FileSystem –Root '\\dc1-app01\apps' –Persist 
     Start-Process -FilePath S:\createfile.bat -Wait 
    } -AsJob 
} 

Write-Verbose 'Waiting for all jobs to finish' 
Wait-Job 
Write-Verbose 'Showing job results:' 
Get-Job | Receive-Job 

我也使它成为一项工作,所以你可以同时在多台服务器上运行它。

为了更加简化的东西,你不必映射驱动器只是尝试这Invoke-CommandScriptBlock

& '\\dc1-app01\apps\createfile.bat' 
+0

感谢您的回应。我试图运行你推荐的命令,但我得到提示输入ID参数?似乎尽管开始运行远程作业。我当前运行的批处理文件是一个简单的创建文件。有任何想法吗? –

相关问题