嘿家伙第一次做海报长时间读者,我现在对我的脚本有点麻烦,并希望有人会检查出来并指出我出错的地方,如下:< / p>
$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没有在服务器上触发,我知道这条线很好,因为我已完成对该命令的隔离测试并手动触发它
注意:删除目录和凭据以保护隐私
答案 0 :(得分: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
}
答案 1 :(得分:0)
您的工作不知道$Server
的含义,因为作业在自己的流程中运行,因此不会访问父流程的变量。你必须传递参数。试试这个:
Start-Job -ScriptBlock $SB -ArgumentList $Server
答案 2 :(得分: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 “从第一个脚本帖子