2011-05-25 2 views
0

Ceci est une partie de mon script pour l'installation d'ADFS. Assez simple, mais il semble que Start-Process analyse les commutateurs de façon amusante. Y a-t-il quelque chose qui me manque?L'installation d'ADFS génère un "paramètre nul"

write-host "Installing ADFS - process should take 30-45 seconds" 
$installtime=get-date -uformat "%Y_%h_%d_%H_%M" 
$logfile="$pwd\adfssetup_$installtime.log" 
$ADFSInstall = "AdfsSetup.exe" 
$ADFSInstallParams = '/quiet /logfile '+$logfile 
Start-Process $ADFSInstall $ADFSInstallParams -wait 
if ({gc -path $logfile | select-string -pattern "AD FS 2.0 is already installed on this computer"} -eq $null){write-host -ForegroundColor Cyan "ADFS Installed"} Else{write-host -ForegroundColor "There was an error Installing ADFS, please check the log file: $logfile;break} 

Si j'exécutons le script ci-dessus, je reçois le texte suivant dans un fichier journal:

 
Microsoft.IdentityServer.Setup Error: 5124 : 6 [ 2070099085 ]: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list. 
    at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args) 
    at Microsoft.IdentityServer.Setup.Diagnostics.TraceLog.WriteLine(TraceEventType eventType, String msg, Object[] args) 

Si j'exécute exactement la même commande manuelle (à partir de la sortie de write-host), tout fonctionne très bien .

Des idées? Merci.

+0

Pas de réponse ici. Laisse deviner ... dans $ pwd il y a un espace blanc dans le chemin? – JPBlanc

Répondre

1

Je ne peux pas supprimer la question, mais ce que j'ai trouvé en enquêtant sur les journaux plus anciens, c'est que l'erreur se produit même lorsque j'exécute la commande de façon régulière. Donc, le script ci-dessus fonctionne réellement comme prévu.

+0

juste marquer cela comme la bonne réponse. – Kev

0

(Je ne comprends pas vraiment ce qui se passe ici, mais voici deux possibilités.)

Une option est que votre get-date ne fonctionne pas comme vous le souhaitez. Le résultat est que $logfile contient un signe de pourcentage (%), ce qui provoque 'injection de chaîne de format' dans le programme d'installation AD FS 2.0. Le message d'erreur pointe dans cette direction.

Cependant, je ne peux pas reproduire cela si je cours votre manuscrit de PowerShell sur mon propre système. Notez également qu'il semble que vous transmettez trois arguments de ligne de commande (/quiet, /logfile et le nom du fichier journal) en un argument. Essayez-les passer comme ceci:

$ADFSInstallParams = @('/quiet', '/logfile', $logfile) 
Start-Process $ADFSInstall @ADFSInstallParams -wait 

Cependant, si cela était la cause du problème alors je l'aurais prévu adfssetup.exe de se plaindre avec une erreur comme command line argument '/quiet /logfile ...' not recognized.

+0

Vous avez raison. Et ce que j'ai trouvé en enquêtant sur les anciens logs (en fait, j'ai exécuté le programme Undelete pour les obtenir), c'est que l'erreur se produit même lorsque j'exécute ADFSSetup.exe de la manière habituelle. Donc, le script ci-dessus fonctionne réellement comme prévu. Merci pour votre aide. –

Questions connexes