2015-03-18 161 views
0

嗨,大家第一次张贴海报很长时间的读者,我现在对我的脚本有点麻烦,并希望有人会检查出来并指出我出错的地方,它如下:并行PowerShell作业未运行命令

$Servers = gc "C:\ServerList.txt" 
$SB = { 
    Start-Process {cmd (C:\psexec.exe \\$Server -u username -p password cmd /c "echo.| powershell C:\Autolog.ps1") 
     } 
Foreach ($Server in $Servers) 
    { 
    Start-Job -ScriptBlock $SB 
    } 

本质上讲,我试图让这个脚本做的是在“Serverslist.txt”每服务器启动PSEXEC,然后启动对上述服务器

的PowerShell脚本我所看到的是作业开始,但我的psexec没有在服务器上触发,我知道这条线是好的,因为我已经完成了该命令的隔离测试,并且ma nually触发它

注:目录和凭证删除保持隐私

回答

0

感谢帮助结束了纳丁出来,并得到它做什么都想,脚本如下:

$Servers = gc "C:\ServerList.txt" 
Foreach ($Server in $Servers) 
    { 
    [String]$cmd = "& cmd (C:\psexec.exe \\$Server -u Username -p Password cmd /c C:\Autolog.bat)" 
    [ScriptBlock]$SB = [ScriptBlock]::Create($cmd) 
    Start-Job -ScriptBlock $SB -ArgumentList $Server 
    echo "Started Script on $Server" 
    } 

我不得不将一些命令的出到一个.bat因为我没有时间来解决问题,但我本质上是C:\ Autolog.bat包含“powershell.exe C:\ Autolog.ps1”从第一个脚本后

0

这是有可能的方式复杂得多,它需要的。我会跑对电脑的那个列表中的脚本块,而不是像这样:

$cred = New-Object System.Management.Automation.PSCredential ("domain\username",(ConvertTo-SecureString 'password' -asplaintext -force)) 
foreach ($server in $servers) { 
    Invoke-Command -ComputerName $comp -ScriptBlock {. C:\Autolog.ps1} -Credential $cred 
} 
+0

感谢您的回复Paul,这是否假设Powershell远程访问已启用?我忘了提及它不是。 另外,我不是很流利的PowerShell,这是一个学习,因为我去东西 干杯 迈克尔 – 2015-03-18 20:59:03

+0

你是对的,PowerShell远程处理将需要启用。有没有特别的原因?这是非常快速和容易设置;在目标服务器上: 'Enable-PsRemoting -force'然后 'winrm quickconfig' – 2015-03-19 01:21:06

+0

因为这里有1000个服务器现场,我不具备权限来不幸地进行必要的更改,尽管尝试使用PSEXEC,尽管显然这两个有相互问题 – 2015-03-19 01:24:32

0

你的工作不知道是什么意思$Server因为工作在自己的进程中运行,所以不访问父进程的变量。你必须通过论证。试试这个:

Start-Job -ScriptBlock $SB -ArgumentList $Server