質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

0回答

1720閲覧

PowerShellで条件分岐させた後に関数の変数を変えるコマンド

zazabi

総合スコア24

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

1クリップ

投稿2019/10/01 01:44

編集2019/10/01 04:22

■環境
widows2012R2にリモート接続
PowerShellを使用

■目的
・下記のコマンドを短くしたいです。

■コマンドの詳細
1.対象のフォルダから最新のファイルを検索
2.上記のファイル名を文字列検索し、3通りの処理分岐をする。
3.上記のファイル内で文字列検索(検索する文字列は3つ)と一致文字列の個数を数える。
4.事前に用意している3種類の文字列の個数が上記で数えた文字列の個数と一致しているかどうか精査する。

PowerShell

1# 対象ファイルのあるフォルダ 2$search = "<対象フォルダパス>" 3 4## サービスの文字列の環境別個数ト(サービス名,教育,検証,ステージングと本番) 5# 実際カウント数は $A0102,$Apache,$Shibboleth に格納 6$word_1 = @("<文字列1>","a1","a2","a3") 7$word_2 = @("<文字列2>","b1","b2","b3") 8$word_3 = @("<文字列3>","c1","c2","c3") 9 10# 最終更新のファイルのフルパスを取得 11$path = (Get-ChildItem $search | Sort-Object LastWriteTime -Desc)[0].FullName 12 13# ファイル名に文字列が含まれるかどうかの関数 14function word ($a){$path.Contains($a)} 15 16# ファイル内の文字列を数える 17function count ($b,$c){ 18 (Select-String -Path $b -Pattern $c).Count 19} 20$x1 = (count $path $word_1[0]) 21$x2 = (count $path $word_2[0]) 22$x3 = (count $path $word_3[0]) 23 24# 数えた文字列の個数が正規の個数と一致するかどうか判別する関数 25function seisa ($1,$2,$3,$4,$5,$6){ 26 if($1 -eq $2 -and $3 -eq $4 -and $5 -eq $6){ 27 Write-Output ("件数が一致しています。") 28 }else{ 29 Write-Output ("件数が一致していません。") 30 } 31} 32 33# 数えた結果を出力 34function message ($1,$2,$3,$4,$5,$6){ 35 Write-Output ($word_1[0]+"は"+$1+"/"+$2+"個あります。") 36 Write-Output ($word_2[0]+"は"+$3+"/"+$4+"個あります。") 37 Write-Output ($word_1+"は"+$5+"/"+$6+"個あります。") 38} 39 40if(word "ED1" -eq "True"){ 41 seisa $word_1[1] $x1 $word_2[2] $x2 $word31[1] $x3 42 message $x1 $word_1[1] $x2 $word_2[1] $x3 $word_3[1] 43}elseif(word "KT1" -eq "True"){ 44 seisa $word_1[2] $x1 $word_2[3] $x2 $word_3[2] $x3 45 message $x1 $word_1[2] $x2 $word_2[2] $x3 $word_3[2] 46}elseif(word "STA"] -eq "True"){ 47 seisa $word_1[1] $x1 $word_2[2] $x2 $word_3[3] $x3 48 message $x1 $word_1[3] $x2 $word_2[4] $x3 $word_3[3] 49}elseif(word "HON" -eq "True"){ 50 seisa $word_1[1] $x1 $word_2[2] $x2 $word_3[3] $x3 51 message $x1 $word_1[3] $x2 $word_2[4] $x3 $word_3[3] 52}Else{ 53 Write-Output ("ファイルが見つかりません。") 54} 55

自分なりに短くしようと試みましたが、他に分かりやすく便利なコマンドがあれば教えていただけると幸いです。
あと、タイトルにどう書けばいいか悩んでいますので違うようであればご指摘お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/10/01 02:01 編集

$service_1 の定義が使用された後から行われていたり、文字列と数値を比較していたりしていますが、このスクリプトは意図通り動くのですか?
zazabi

2019/10/01 02:01

ご指摘ありがとうございます。 修正させていただきます。
Zuishin

2019/10/01 02:03

意図通り動かないなら短くするより先に意図通り動くものを作ってください。
zazabi

2019/10/01 02:05

コメントありがとうございます。 申し訳ありません、その通りだと思います。 それで、短くできる部分はありますでしょうか?
Zuishin

2019/10/01 02:09

普通短くするというのは、処理内容が変わらないように短くするという意味です。元々の処理内容が間違っているなら短くできません。
zazabi

2019/10/01 02:11

コメントありがとうございます。 まだ間違っているのですね……。 今一度コマンドを確認してみて、改善個所を模索してみます。
Zuishin

2019/10/01 02:13

間違っているかどうか、仕様のわからないこちらではわかりません。正しく動くことをそちらで確かめていないことがわかったのでできないという意味です。
zazabi

2019/10/01 02:15

コメントありがとうございます。 承知いたしました。では他の方にお任せしますね。
Zuishin

2019/10/01 02:44 編集

業者扱いされてるようですがまあそれはそれとして、確かめる気はないということですね。わかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問