マイティシェルへの憎しみのポスト

少し前に、指定されたディレクトリ内の指定された名前のすべてのサブディレクトリを削除する1つの簡単なスクリプトを作成しました。



Remove-Item * -Force -Recurse -Include name1,name2,name3 -ErrorAction SilentlyContinue


久しぶりですが、ここで必要になりました。私はそれを実行します-私は何も削除しませんでした。



「WTF?」と思います。彼は掘り始めた。私はいじくり回し、すべてを調べました、そしてリストは以前に作成されました、そして名前は変更されました-それはまだ何も削除しません。結局、私は彼らのドックで次のように読みました。「実際、-Includeは-Recurseと一緒に使用するとバグがあるので、クラッチを使用してください。」:

Remove-ItemのRecurseパラメータには既知の問題があるため、この例のコマンドはGet-ChildItemを使用して目的のファイルを取得し、パイプライン演算子を使用してそれらをRemove-Itemに渡します。


さて、このクラッチを使って書き直しました。 1つの地獄は何も削除しません。さらに、-Include指定したGet-ChildItemは空を返します。繰り返しになりますが、パラメータで歪ませなかったため、私がしなかったことは機能しません。主なことは、-Excludeで機能ますが-Includeでは機能ないことです。私は一日中それを殺しました:私はパラメータのどこかで混乱したと思いました、私はいくつかの狡猾なニュアンスを考慮していませんでした。そして、最終的に何が起こったのですか?私はそれらをPS7.1に置きました-それはうまくいきました。Remove-Itemのみを使用した最初のシュートレスバージョンでも機能しました。一般的に、それは彼らのバグであることが判明しました。



しかし、彼らのMighty Shellで使い古されたので、私はGoogleに行って、なぜ彼らのシェルがそのような猛烈な構文を持っているのかを読みました。 Mlyn、彼らはそれをコンソールの.NETとして位置付けていますが、C#構文のような匂いすらありません。代わりに...



一般的に、私はこの記事に出くわしました:「PowerShellについて私が嫌うもの」。言われているように、「私はこれ以上同意できませんでした。」



マイティシェルのチームはバッシュ愛好家の集まりだと思います。



-最後に、複雑なスクリプトを記述できるWindowsコンソールを作成しましょう。そして、cmdが古くなっているため、すでに少し恥ずかしい思いをしています。

— ! ? VBScript, JScript. , .NET: C#, VB. , C# ? , C# . , .NET .

— , , , C#? bash! bash Windows. , bash , , 1960-. , , ! — ! . . , . ?



All Articles