Domanda

Sto lavorando per automatizzare le patch per un'app fornitore.Volevo usare PowerShell per ITORATO su un elenco di server e utilizzare la rimozione per installare su ogni scatola.Tuttavia, un aspetto mi sta dando un grande mal di testa.Devo chiamare uno script CMD fornito dal venditore per impostare le variabili di sistema prima di eseguire lo script di installazione.Quindi chiamo la sceneggiatura come così a PowerShell:

Invoke-Command -session $session {cmd /k ($args[0]+"\data\env.bat")} -Args $lesDestDir
.

Vedo che esegue come riempito il suo lavoro nella finestra PowerShell, ma le chiamate successive allo script di installazione IE:

Invoke-Command -session $session {perl ".\rollout-2010.pl " $args[0] " NC"} -Args $rollout
.

Uscita immediata Dicendo che le varie variabili di sistema che utilizzano non sono state impostate.Qualcuno può spiegarmi la portata delle variabili di sistema?Cessano di esistere dopo il completamento del comando invoke?Devo stringere insieme le due chiamate script in un singolo comando invoke in modo che il secondo script possa accedere alle variabili di sistema o qualcosa del genere?

È stato utile?

Soluzione

Modifiche apportate tramite il comando SET sono non permanenti, si applicano solo alla procedura cmd corrente e rimangono fino a quando il processo cmd è terminato.

Se possibile, impostare la variabile dell'ambiente utilizzando la sintassi di PowerShell:

Invoke-Command -session $session {$env:myvar = 1}
.

In alternativa è possibile stringere i comandi utilizzando il separatore di comando cmd & come questo:

Invoke-Command -session $session {cmd /k "set myvar = 1" `& "set"}
.

Altri suggerimenti

Sì, è necessario stringali insieme.Le variabili di ambiente vengono impostate nella prima sessione CMD che uscite, quindi un secondo viene avviato senza di loro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top