并发 Powershell 作业不是 运行 命令

Concurrent Powershell jobs not running command

大家好,第一次发帖很长时间了 reader,我现在的脚本有点问题,希望有人能检查一下并指出我哪里出错了,如下:

$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 没有在服务器上触发,我知道这条线很好,因为我已经完成了对该命令的隔离测试并手动触发了它

注意:删除目录和凭据以维护隐私

这可能比需要的复杂得多。我会 运行 针对该计算机列表的脚本块,而不是像这样:

$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
}

您的作业不知道 $Server 是什么意思,因为作业 运行 在它们自己的进程中,因此不访问父进程的变量。你必须通过这个论点。试试这个:

Start-Job -ScriptBlock $SB -ArgumentList $Server

感谢帮助最终解决了它并让它做想要的事情,脚本如下:

$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" 来自第一个脚本 post