并发 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
大家好,第一次发帖很长时间了 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