前提
実行したスクリプトの日付が「.txt」で吐き出されます。
テキストの吐き出し先は1つのフォルダ内になります。
例)
C:¥hoge
20220722.txt
20220715.txt
20220618.txt
20220602.txt
20220521.txt
実現したいこと
ユーザに対して制限解除のスクリプトを実行可能にしたいと考えております。
しかし何度も実行可能にするのも不都合があるため一月に2回までと制限をかけ、3回目に実行しようとすると
メッセージが表示され実行できないようにする仕掛けをスクリプトで実現したいと考えております。
スクリプトを実行した際に前提のテキストを吐き出し判定を行い実行の有無を分岐させたい。
上記前提だと「202207」から始まるテキストは既に2つあるので3回目を実行しようとしたときに「実行できない」メッセージを表示させたい。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
$path = "C:\hoge" $file = (Get-ChildItem $path\*.txt).BaseName ←.txtの拡張子を外します $file.SubString(0,6) ←文字列で「yyyyMM」の年月だけ取り出します $y = Get-Date -Format "yyyyMM" $fileにはyyyyMMのリストが格納されています。 $yには同じくyyyyMMが格納されていて、文字列が同じものを抽出しカウントしたいと考えています。 2個までであれば処理を実行。3個以上はエラーにするスクリプトをご教示ください。
試したこと
当方Powershellが初心者なのでどういうことが可能かがよくわかっておりません。
補足情報(FW/ツールのバージョンなど)
どこにどういう問題があるのかわからないので、とりあえず相当広くカバーできそうな参考情報を。
https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_logging_windows?view=powershell-7.2
> 考え方含めてご教示いただけると助かります。
目的が果たせるよう好きにすればいいと思います。
ネックになりそうなのはユーザーの権限と改竄でしょう。
>Zuishinさん
追記ありがとうございます。
当方で不明な部分はフォルダ内に格納されているテキストを読み込んで同じものが3つ以上(※1)になったときに
エラー判定ができるようなスクリプトの作成が可能かどうかになります。
※1:テキストで年/月の値
それで目的が果たせるようには思えませんが、ユーザー毎のテキストファイルに年月(たとえば 202207)を追記していき、その最後から 3 行目を取り出して、それを現在日時と比較すれば良いんですよね?
2 行までしかなければ true で、それ以上ある場合は Select-Object などで後ろから 3 行目を取り出し、比較すれば良いと思います。
次のコマンドをコマンドラインから実行し、結果を見てみてください。
(Get-Date).ToString("yyyyMM")
(1, 2, 3, 4, 5, 6, 7)[-3]
>Zuishinさん
追記ありがとうございます。
例えば
前提条件のテキストが格納されています。
$path = "C:\hoge"
$file = (Get-ChildItem $path\*.txt).BaseName ←.txtの拡張子を外します。
$file.SubString(0,6) ←文字列で「yyyyMM」の年月だけ取り出します。
$y = Get-Date -Format "yyyyMM" ←スクリプト実行日を取得します。
3行目と4行目でなんらかの比較を行い判定することはできないでしょうか?
例えば一致したものをとりだして、その個数が3個以上だとエラーになるようなスクリプトとかむずかしいでしょうか?
質問を見直して、回答できるだけの材料を「全て」書くのが良いと思います。
回答2件
あなたの回答
tips
プレビュー