e / s de fichier, est-ce un bug dans Powershell?
J'ai le code suivant dans Powershell
$filePath = "C:\my\programming\Powershell\output.test.txt"
try
{
$wStream = new-object IO.FileStream $filePath, [System.IO.FileMode]::Append, [IO.FileAccess]::Write, [IO.FileShare]::Read
$sWriter = New-Object System.IO.StreamWriter $wStream
$sWriter.writeLine("test")
}
Je reçois l'erreur:
Ne peut pas convertir l'argument "1", la valeur: "[IO.FileMode]::Append", pour
"FileStream" pour "type de Système.IO.FileMode": "Impossible de convertir la valeur
"[IO.FileMode]::Append" pour "type de Système.IO.FileMode" en raison des invalides
les valeurs d'énumération. Spécifiez l'une des opérations suivantes des valeurs d'une énumération
et essayez de nouveau. Les éventuelles valeurs d'énumération sont "CreateNew, de Créer, de
Ouvert, OpenOrCreate, Tronquer, Append"."
J'ai essayé le équivalent en C#,
FileStream fStream = null;
StreamWriter stWriter = null;
try
{
fStream = new FileStream(@"C:\my\programming\Powershell\output.txt", FileMode.Append, FileAccess.Write, FileShare.Read);
stWriter = new StreamWriter(fStream);
stWriter.WriteLine("hahha");
}
il fonctionne très bien!
Quel est le problème avec mon script powershell? BTW, je suis en cours d'exécution sur powershell
Major Minor Build Revision
----- ----- ----- --------
3 2 0 2237
- Les énumérations sont analysées comme des chaînes de caractères! Voir stackoverflow.com/questions/3289573/...
Vous devez vous connecter pour publier un commentaire.
Un autre moyen serait d'utiliser simplement le nom de la valeur et de laisser PowerShell convertir le type de cible:
Lors de l'utilisation de la
New-Object
applet de commande et le type de cible constructeur prend en paramètre, vous devez soit utiliser le-ArgumentList
paramètre (de New-Object) ou envelopper les paramètres entre parenthèses - je préfère pour emballer mes constructeurs avec des parenthèses:Cmdlet New-Objet de l'aide en ligne: http://go.microsoft.com/fwlink/?LinkID=113355
-ArgumentList
. Vos parens venez de faire une expression distincts; est-ce exact?new-object <typename>(arg,arg,...)
parce qu'il vous trompe en lui faisant croire que c'est juste un C# constructeur quand il ne l'est pas vraiment. C'est en fait moins à taper pour l'utilisationnew-object <typename> arg,arg,...
. Désolé d'être pointilleux, mais j'ai répondu trop de questions sur le pourquoi deMyPowerShellFunctionThatTakesThreeParameters(1,2,3)
ne fonctionne pas. 🙂Encore une autre façon serait de joindre les enums des parens:
Si votre objectif est d'écrire dans un fichier, ou un fichier texte, alors vous pouvez essayer les prises en charge applets de commande PowerShell pour y parvenir?