2015-03-18 159 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