強力パスワードの生成をしてテキスト保存を行う

PowerAutomateDesktopを利用して、強力なパスワードを生成し、さらにそれをテキストファイルとして出力します

Variables.CreateNewList List=> List
LABEL ReCreate
Variables.ClearList List: List
LOOP LoopIndex FROM 1 TO 10 STEP 1
    LABEL Regene
    Text.Random UseUpperCaseLetters: True UseLowerCaseLetters: True UseDigits: True UseSymbols: True MinimumLength: 15 MaximumLength: 20 RandomText=> RandomText
    Text.Replace Text: RandomText TextToFind: $'''\\.|,|-|_''' IsRegEx: True IgnoreCase: False ReplaceWith: $'''再生成''' ActivateEscapeSequences: False Result=> Replaced
    IF Contains(Replaced, $'''再生成''', False) THEN
        GOTO Regene
    END
    Variables.AddItemToList Item: RandomText List: List
END
Display.SelectFromListDialog.SelectFromList Title: $'''生成パスワードの選択''' Message: $'''リストから使用するパスワードを選択してください(再生成を選択するとパスワードを再度生成します)''' List: $'''再生成
%List%''' IsTopMost: True AllowEmpty: False SelectedItem=> SelectedItem ButtonPressed=> ButtonPressed
IF ButtonPressed = $'''Cancel''' THEN
    EXIT Code: 0
END
IF SelectedItem = $'''再生成''' THEN
    GOTO ReCreate
END
Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.DesktopDirectory SpecialFolderPath=> SpecialFolderPath
File.WriteText File: $'''%SpecialFolderPath%\\NewText.txt''' TextToWrite: SelectedItem AppendNewLine: False IfFileExists: File.IfFileExists.Overwrite Encoding: File.FileEncoding.DefaultEncoding
Display.ShowMessageDialog.ShowMessage Title: $'''PowerAutomateDesktop''' Message: $'''デスクトップにテキストファイルを生成しました''' Icon: Display.Icon.Information Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True

強力なランダムパスワードを生成して、テキストファイルに書き出します
これを利用することで、考えるのが面倒なパスワードを簡単に生成出来ます
またローカルで作成が出来るので安心感もありますね

このフローでは使用不可文字を設定しています
それは「,」「.」「-」「_」の4文字です
これらは特別な意味を持つものもあったりするのであまり使用しなくても良いかな、と感じた4文字です
後述の解説を読んでもらえれば、除外を解除することも追加・変更も自由に行えます

また、リスト生成してその中から1つを選ぶものとなっており
気に入らなければ再生成することも可能になっています

フローの解説

コードを貼り付けると、22行のフローとなります
順番に解説を行います

1~3行目のフローの画像
1~3行目のフロー

1行目:新しいリストの作成
1行目ではランダム作成した文字列の選択リスト用のリスト変数を作成しています
ここで作成したListという変数に後述で選択するパスワードを格納していきます

2行目:ラベル
このラベルは、後述のフローでリストの再作成を選択した場合に戻ってくる場所になります
再作成を選択した場合は、ここから再開することで全く新しいパスワードの生成を行ことになります

3行目:リストのクリア
2行目でフローが返ってきたときには、前回生成のパスワードリストが残ったままです
それを削除するためのアクションです
なので再生成をしていない場合はまったく意味のないアクションですね

4行目のフローの画像
4行目のフロー

4行目:Loop
4行目からループ処理を行います
12行目のEndまでがループ処理内となります
このループでは、パスワードの生成リストを作成しています
ループの条件が1から10になるまで1を加算しつつ実行なので、ようするに10回実行しているってことですね
ここもリストに10個も選択肢いらんねんって場合は減らしても良いですし、もっとたくさんの中からめちゃめちゃ悩むけど選びたいって場合は増やしても良いですね

5~11行目のフローの画像
5~11行目のフロー

5行目:ラベル
2度目のラベルの登場ですね
ここでは後続の文字列生成時に除外したい文字が含まれていた場合に再作成を行うために戻ってくる個所になります
除外文字が含まれる文字列が生成された場合はここに何度でも帰ってきます

6行目:ランダムテキストの作成
これが今回の処理の目的のアクションですね
例コードでは22行にもなっていますが、シンプルに文字列だけ生成するならこの1行で済んでしまうって、身も蓋もない話です
また、このアクションには設定で利用する文字範囲の指定が出来るので
記号は含めたくない、とか大文字は含めたくないとかであればこちらの設定を変更すれば簡単に対応可能です

7行目:テキストを置換する
ここで除外文字を置換しています
6行目の解説にもあるように大きく利用文字の指定は出来るのですが、その中でこれだけとかの細かい設定は出来ないので除外処理を入れる必要があります
それがここのアクションになります

テキストを置換するアクションの設定画面を表示した状態の画像
テキストを置換するアクションの設定画面

このアクションの設定のうち、「検索するテキスト」に指定したものが除外したい文字になります
今回の場合は4文字なので、それを指定しています
ただ指定の方法が正規表現というなかなかクセのある指定方法になるので
正規表現を使うをオンにする必要があります

正規表現について細かく話すと、とんでもないことになるので
詳しく知りたい方はGoogle先生に聞いてみてください
今回の設定では、記事最初に記載した4文字を除外します
ただ「.」だけは正規表現上特別な意味を持つ文字なので、エスケープ文字という「\」を入力して「\.」としています
また各文字の間に「|」が入力されていますが、これは正規表現でORを意味します
なので4文字のどれかを置き換えるという意味になりますね

置き換え後については、なんでも良いのですが判定に必要になるので日本語の方が良いですね
ランダムテキスト作成で利用される文字だけは利用したらあかんですね

正規表現がなんかよく分からん、という場合はこの「検索するテキスト」に1文字だけ指定して、アクションを4行にしても構わないです
ただ、その時に注意してほしいのが「解析するテキスト」は2つ目以降は置換をした変数を指定しないといけないという点です
これをしてないと、1つ目で置き換えたものが2つ目でリセットされてしまいます

ここのアクションの設定次第で、除外文字を自由に指定できます
ただここに指定を増やしすぎると再作成になる可能性が上昇してパスワード生成に時間がかかってしまうので、あんまり増やしすぎないほうがええです

8行目:If
ここで置き換えした文字列「再作成」が存在しているかどうかの判定を行っています
その文字が含まれていれば、5行目のラベルに戻って再作成を行います
ちなみに10行目がこのIfの終了行になります

9行目:移動先
これが指定のラベル行に移動するアクションです
このアクションでフローを巻き戻すことが出来るんですね~

13行目のフローの画像
13行目のフロー

13行目:リストから選択ダイアログを表示
ここで作成したパスワードリストを表示して、ユーザーに生成するパスワードの指定を行ってもらっています
設定には、1行目で作成したListの変数を指定しているのと、再作成依頼用に「再作成」という項目も追加しています
これを最上部指定することで、初期選択に再作成が表示されます
またここではキャンセルも出来るようにしています
なので、戻り値として選択した項目の文字列と選択したボタンを設定しています

14~19行目のフローの画像
14~19行目のフロー

14行目~16行目:
ここでは13行目の選択ダイアログでキャンセルを選択した時の処理を行っています
キャンセルをした場合はフローを停止しています
ただそれだけですね

17行目~19行目:
ここでは選択したアイテムが再生成かどうかを判定しています
再生成が選択されていた場合は2行目のラベルに戻ります
リスト自体を更新することになります

20~22行目のフローの画像
20~22行目のフロー

20行目:特別なフォルダーを取得
ここでDesktopのパスを取得しています
保存場所自体は別にどこでもいいのですが、このフローの性質上作成されたテキストファイルを利用するのが後日とか、ずっと同じ場所に残しておきたいという想定が低いのでそういったファイルはDesktopに作成するのが便利です
パスワードを設定して、ブラウザに記憶させたり別途管理表に転記したならもう削除してしまうのが良いからです
ここではパス取得だけなので、保存場所を別の場所にしたい場合は次の行を変更します

21行目:テキストファイルに書き込みます
ここでテキストファイルの生成を行っています
同じ名称のファイルがあった場合は上書きします(確認は出ません)
フローの性質上、上書きせずに前回分を残しておく必要性が低いので上書きで良いです
またこの設定の「ファイルパス」を任意に変更すれば、好きな場所に生成することが可能です

22行目:メッセージを表示
完了メッセージを表示しています
ここも必要なければ削除して良いです
デスクトップ通知を無効にしていなければ、処理完了は通知が出るので不要っちゃ不要です