実行したら自己削除するPowerShellスクリプト$MyInvocation.MyCommand.Sourceと$MyInvocation.InvocationName$MyInvocation.MyCommandについて見てみる$MyInvocation.InvocationNameにも同じ内容が格納されている。自己削除用コマンドをスクリプトの頭に持ってきても動く.batで1行目に自分自身を削除するようにすると・・・?.ps1で1行目に自分自身を削除するようにすると・・・?まとめ実行したら自己削除するPowerShellスクリプト情シスとして働いていると、キッティング時や、ユーザに一度だけ実行させたいスクリプトを用意する、というケースに時々遭遇します。batファイルやvbsファイルでも実装はできますが、スクリプト内に相対パスないしは絶対パスを抜き出して、自分で削除するメソッドを用意する必要があるため、ソースが汚くなりがちです。PowerShellであれば1行書くだけでサクッと解決する方法があるのです。Variables(自動変数)と呼ばれる物があります。その中に、実行したコマンドの様々な情報を格納する$MyInvocationという変数が用意されています。$env:COMPUTERNAME$MyInvocation例えば上記の様なPowerShellを実行した際に、$MyInvocationの中身は以下の通り出力されます。:今回はこの$MyInvocation内のアイテム、「MyCommand」と「InvocationName」に着目してみます。$MyInvocation.MyCommandについて見てみるそれではまずは$MyInvocation.MyCommandについて詳しく見てみましょう。$env:COMPUTERNAME$MyInvocation.MyCommand先ほど書いたtest.ps1を上記の様に書き直して実行した際の、$MyInvocation.MyCommandの内容は下記の通りになります。C:\Users\syobon\Desktop\test.ps1こうしてみると、$MyInvocation.MyCommandの中にスクリプトの絶対パスが格納されたSourceアイテムがあることが分かります。$MyInvocation.InvocationNameにも同じ内容が格納されている。上記記載の通り、$MyInvocation.InvocationNameにも$MyInvocation.MyCommand.Sourceと同じく、実行したPowerShellスクリプトの絶対パスが記載されています。下記コマンドのどちらかを実行すれば自己削除機能を実現することができます。$MyInvocation.MyCommand.Source自己削除用コマンドをスクリプトの頭に持ってきても動くちょっとしたトリビアのような物ですが、上記で記載した自己削除用コマンドをPowerShellスクリプトの1行目に書いても、2行目以降の処理が走ります。これは、PowerShellスクリプト内部のコマンドは、PowerShellプロセスの子として実行される、という特徴のためです。8.8.8.8例えば、上記のようなbatファイルを実行すると下記の様な実行結果が表示されます。ファイルが見つかりません。.ps1で1行目に自分自身を削除するようにすると・・・?PowerShellスクリプトで、最初にスクリプト自身を削除して、8.8.8.8へpingを打つスクリプトを書くと以下の通りとなります。8.8.8.8それぞれを実行すると下記の様な結果が得られます。8.8.8.8」がどちらも実行されていてかつ、実行後にはInvocationName.ps1、MyCommand.ps1ともに削除されていることが分かります。まとめそろそろ.batや.vbsから.ps1への移行が佳境を迎えている(主にAzure対応で)ので、このTipsが少しでも情シス担当の方の役に立てれば幸いです。Windowsサーバーを複数台管理されている方の中に、SNMPの設定を一括で流し込みたいなと考えている方って結構いらっしゃるかと思います。コメントをキャンセルメールアドレスが公開されることはありません。CEをインストールしようとしたらつまずいたので何とかした2020.02.04タイトルとURLをコピーしました。