none
Webページの文字列を取得し、それを変数とする方法 RRS feed

  • 質問

  • お世話になります。

    下記のように「i-01427d6bbbc1a3750」とだけ書かれたページがあります。


    上記の文字列は一定ではない為その文字列を取得して、それを変数にしてバッチ処理をしたいと考えています。
    値を取得するだけであれば以下のコマンドでできるのですが、それを変数(変数名は仮に「name」としておきます)に代入できません。

    コマンド⇒PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/instance-id
    表示される結果⇒i-01427d6bbbc1a3750


    どのようなコマンドであれば取得した文字列を編集に代入できるでしょうか?

    以上宜しくお願い致します。


    • 編集済み kd0901 2020年11月25日 2:10
    2020年11月25日 2:09

回答

  • すみません。自己解決しました。

    以下のバッチで意図した通りデータが取得できました。


    2.csvは以下のようになっています。
    A列がサービス名、B列がサービス表示名です。


    AJRouter AllJoyn Router Service
    ALG Application Layer Gateway Service

    ==========================================================

    for /f "usebackq tokens=*" %%a in (`PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/instance-id`) do @set incetanceid=%%a

    ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION
    CLS

     

    FOR /F "tokens=1,2* delims=," %%i IN (2.csv) DO (
        sc query %%i | findstr STATE | findstr RUNNING
            if !errorlevel! == 0 (
                echo errorlevel=!errorlevel!
                set Processes=1
            ) else (
                echo errorlevel=!errorlevel!
                set Processes=0
            )
            echo Processes=!Processes!
    echo metric-name is %%j
    echo Processes is !Processes!
    aws cloudwatch put-metric-data --metric-name "%%j" --namespace namespace3 --region ap-northeast-1 --value "!Processes!" --unit "Count" --dimensions "InstanceId=%incetanceid%"

    )

    ==========================================================
    • 回答としてマーク kd0901 2020年11月30日 8:25
    2020年11月30日 8:25

すべての返信

  • kd0901さん、こんにちは。フォーラムオペレーターのFarenaです。

    TechNetフォーラムにご投稿くださいましてありがとうございます。

     

    文字列を変数にしてバッチ処理コマンドを知りたいですか。

    ご存知の方おりましたら、ご意見を共有頂ければありがたいです。


    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    2020年11月27日 3:29
    モデレータ
  • バッチ(.bat)でなければならないのでしょうか?

    この手の処理であれば PowerShell で完結した方が簡単だと思いますが。


    Hebikuzure aka Murachi Akira

    2020年11月27日 6:15
  • >Hebikuzure aka Murachi Akira さん

    実は以下の処理をタスクスケジューラで実行しようとしています。
    https://qiita.com/0HY4/items/b8614d2c871a0c60cc3c

    これを実現できるのであればPowerShellでも問題ありません。
    今のところPowerShellで実現できる方法が見つかっていないので、
    バッチファイルの方がハードルが低いのではないかと考えています。


    2020年11月27日 9:04
  • 元記事もタスクスケジューラーで実行していますが、どこをどう変えてののような情報を取得しようとしているのでしょう?

    元記事の

    for /f "usebackq tokens=*" %%a in (`PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/instance-id`) do @set incetanceid=%%a

    で、PowerShell で実行した結果が incetanceid 変数に代入されるのですが。


    Hebikuzure aka Murachi Akira

    2020年11月28日 8:37
  • Hebikuzure aka Murachi Akiraさん

    変更したいのは以下の2つです。

    >sc query 【###確認したサービス名を入力###】 | findstr STATE | findstr RUNNING >null
    サービス名を他のcsvファイルやテキストファイルからインポートできないか?

    >aws cloudwatch put-metric-data --metric-name "【###メトリクス名###】" --namespace "【###ネームスペース名###】" --region 【###リージョン名###】 --value %Processes%  --unit "Count" --dimensions "InstanceId=%incetanceid%"
    メトリクス名、ネームスペース名を他のcsvファイルやテキストファイルからインポートできないか?

    以下のようなcsvファイルからインプットデータをインポートできれば幸いです。

    A列:サービス名、B列:メトリクス名、C列:ネームスペース名
    ※リージョンは東京固定の想定なのでなくても大丈夫です。


    以上よろしくお願いいたします。
    2020年11月30日 0:03
  • すみません。自己解決しました。

    以下のバッチで意図した通りデータが取得できました。


    2.csvは以下のようになっています。
    A列がサービス名、B列がサービス表示名です。


    AJRouter AllJoyn Router Service
    ALG Application Layer Gateway Service

    ==========================================================

    for /f "usebackq tokens=*" %%a in (`PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/instance-id`) do @set incetanceid=%%a

    ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION
    CLS

     

    FOR /F "tokens=1,2* delims=," %%i IN (2.csv) DO (
        sc query %%i | findstr STATE | findstr RUNNING
            if !errorlevel! == 0 (
                echo errorlevel=!errorlevel!
                set Processes=1
            ) else (
                echo errorlevel=!errorlevel!
                set Processes=0
            )
            echo Processes=!Processes!
    echo metric-name is %%j
    echo Processes is !Processes!
    aws cloudwatch put-metric-data --metric-name "%%j" --namespace namespace3 --region ap-northeast-1 --value "!Processes!" --unit "Count" --dimensions "InstanceId=%incetanceid%"

    )

    ==========================================================
    • 回答としてマーク kd0901 2020年11月30日 8:25
    2020年11月30日 8:25