Question Commandes $Universe & Powershell ?

Plus d'informations
il y a 15 ans 1 mois #8649 par DUMOULIN
Bonjour,

Je suis en train de scripter un automate de surveillance des moteurs des ordonnanceurs $U d'une plateforme de serveurs.

Le problème, c'est que même après avoir lancé l'uxsetenv, les commandes que je lance se terminent toutes de la même façon :

[code:1]
PS D:\ORSYP\A18003\mgr> ./uxsetenv
PS D:\ORSYP\A18003\mgr> cd ../exec
PS D:\ORSYP\A18003\exec> ./uxlst node
Conpany environment not found
[/code:1]

Alors que la même suite de commandes dans le cmd Windows :

[code:1]
D:\ORSYP\A18003\mgr>uxsetenv
D:\ORSYP\A18003\mgr>cd ../exec
D:\ORSYP\A18003\exec>uxlst node
Commande : uxlst node full

NODE LABEL

ASAIX99
AVTW4850
BOREALEI
BOREALEP
DNAWEBI
(...)
[/code:1]

Je n'ai rien trouvé côté Orsyp... Si l'un de vous (au moins ! ;-) ) peut m'aider...

Merci,

Harfango

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #8651 par Jacques Barathon
Pour que les variables d'environnement définies par uxsetenv persistent dans le reste de la session, il faut \"dot sourcer\" le script :

[code:1]
PS> . ./uxsetenv
[/code:1]

Tu noteras l'espace qui sépare le premier point du deuxième. Ce premier point indique à PowerShell d'exécuter la commande qui suit dans le contexte de la session. Toutes les variables (ainsi que les fonctions) définies par cette commande resteront accessibles une fois cette commande terminée, alors que par défaut elles \"mourraient\" avec elle.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #8652 par DUMOULIN
Bonjour,

Et merci de la rapidité de la réponse, mais...

[code:1]PS D:\ORSYP\A18003\mgr> . ./uxsetenv
PS D:\ORSYP\A18003\mgr> ../exec/uxlst node
Conpany environment not found[/code:1]

Celà dit, j'ai peut-être encore oublié quelque-chose...

Harfango

Edit
Mais ça marche dans un fichier PS1... Comprend pas...<br><br>Message édité par: Harfango, à: 1/02/11 10:19

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #8654 par DUMOULIN
Désolé...
Mais pour la première commande, pas de problème, mais pour la suite...

Dans un premier temps, je récupère la liste des noeuds pour la mettre dans un fichier :
[code:1]# Récupération de la liste des noeuds $U paramétrés sur la machine locale
'D:'
'cd /ORSYP/A18003/mgr'
'. ./uxsetenv'
'cd ../exec'
'./uxlst node &gt;&gt; NodeList.lst'
[/code:1]

Ensuite, je \&quot;nettoie\&quot; le fichier pour ne conserver que ce qui m'intéresse, puis j'essaye un uxlst ATM en parcourant le fichier :
[code:1]foreach ($line in $NodesList)
{
echo \&quot;Création du fichier automate pour le noeud $line\&quot;
$commande=\&quot;D:/ORSYP/A18003/exec/uxlst.exe ATM NODE=$line &gt; D:\ORSYP\A18003\Exploitation\$line.txt\&quot;
invoke-expression $commande
}
[/code:1]

Et là, j'ai bien les fichiers créés, contenant tous \&quot;Conpany environment not found\&quot;. J'ai essayé de refaire un uxsetenv avant et pendant la boucle, mais sans plus de succès...

Une idée ?

Harfango

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #8660 par Jacques Barathon
Euh oui, j'ai répondu un peu vite en effet...

Le fichier uxsetenv est un fichier de commandes .BAT, son exécution directement dans PowerShell, dot sourcée ou pas, n'affecte pas les variables d'environnement de la session PowerShell en cours.

Je me souviens d'un script créé par Jim Truher ou Lee Holmes à une époque qui faisait juste ça : importer les modifications de l'environnement générées par un fichier .cmd ou .bat.

N'ayant pas pu le retrouver (je n'ai pas beaucoup cherché :)) j'en ai écrit un vite fait, qui devrait convenir pour ton besoin :

[code:1]
# import-env.ps1

param ([String]$CmdFile)

$TempBaseName = (Get-Date).Ticks.ToString()
$TempCmdBatch = $TempBaseName + '.cmd'
$TempEnvBefore = $TempBaseName + '.001'
$TempEnvAfter = $TempBaseName + '.002'

@\&quot;
set &gt; $($env:tmp)\$TempEnvBefore
call $CmdFile
set &gt; $($env:tmp)\$TempEnvAfter
\&quot;@ | out-file -enc ASCII $env:tmp\$TempCmdBatch

cmd /c $env:tmp\$TempCmdBatch

compare-object (type $env:tmp\$TempEnvBefore) (type $env:tmp\$TempEnvAfter) | where {$_.sideindicator -eq '=&gt;'} | foreach {
$_.InputObject -match \&quot;(?&lt;var&gt;[^=]+)=(?&lt;val&gt;.+)$\&quot; &gt; $null
invoke-expression \&quot;`$env:$($matches.var)='$($matches.val)'\&quot;
}

$TempCmdBatch, $TempEnvBefore, $TempEnvAfter | foreach {remove-item $env:tmp\$_}
[/code:1]

Une fois le code ci-dessus enregistré dans un script import-env.ps1, tu peux l'utiliser pour lancer ton fichier uxsetenv :

[code:1]
PS D:\ORSYP\A18003\mgr&gt; import-env ./uxsetenv
[/code:1]

La suite devrait se dérouler normalement.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #8662 par DUMOULIN
Eh ben...

Ben ça marche, mais je suis à peu près certain de ne pas tout comprendre à ton script :S

Je vais fouiller ça, en tous cas merci encore !

Harfango

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.062 secondes
Propulsé par Kunena