Domanda

Sto cercando di eseguire un file cmd su un elenco di 48 computer. Non voglio per l'esecuzione e attendere il completamento in sequenza perché ogni cmd richiede circa 10 minuti per completare. Gestione remota Windows non è un'opzione. Nessuno dei due è WMI. PSExec è un'opzione .... ma io non riesco a farlo funzionare all'interno di Start-Job.

che sto facendo qualcosa di simile:

$sb = {
    param
    (
        $computer = "serverw01",
        $userid = "domain2\serviceid",
        $password = 'servicepw',
        $command = "cd /d d:\ && updateAll.cmd"
    )

    d:\eps\pstools\PsExec.exe -u $userid  -p $password "\\$($computer)" cmd /c $command
}

foreach ($computer in Get-Content "D:\Data\serverlist.txt") {
    Start-Job $sb -ArgumentList $computer
}

Questo crea un sacco di posti di lavoro .... ma la non completa e se ricevo-Job su uno di essi mi rimetto

    PS> get-job | receive-job -Keep

    + CategoryInfo          : NotSpecified: (:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

esegue bene se corro la funzione come:

& $sb -computer "serverw01"

lo script avvio viene eseguito in PowerShell v2.0 2008R2 casella Server su Ho provato su una scatola in domain2 mentre si è collegati con un ID utente admin di dominio (stesso risultato).

È stato utile?

Soluzione

Prova questo per il comando psexec, assicurando si include "-d" per non aspettare per la risposta, e mettere la giusta variabile computer dopo PsExec:

d:\eps\pstools\psexec "\\$($computer)" /accepteula -u $userid -p $password -d cmd /c $command

Altri suggerimenti

Questo problema si verifica appeso su server Win2003 e Win2008.

La maggior parte delle persone a risolvere questo problema con una soluzione come eco e tubazioni in modo che PowerShell ottiene qualche input da STDIN.

Ma esiste una soluzione entro PowerShell. Basta iniziare PowerShell con l'opzione -inputformat nessuno come:

powershell -inputformat none -command ...

Si prega di provare il parametro -accepteula a psexec come

d:\eps\pstools\PsExec.exe -accepteula -u $userid  -p $password

da

$computerList = Get-Content "D:\Data\serverlist.txt"      
$sb = 
{ 
    param($name)
        }
            $computer = $name
            $userid = "domain2\serviceid"
            $password = 'servicepw'
            $command = "cd /d d:\ && updateAll.cmd"
            d:\eps\pstools\PsExec.exe -u $userid -p $password \\$computer cmd /c $command
         {
}
foreach ($computer in $computerLinst) {
    Start-Job $sb -ArgumentList $computer
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top