powershellで複数行のコマンドを-processに書く方法

このQ&Aのポイント
  • foreach-objectの-process{}の中に複数のコマンドを書く方法はありますか?長いコマンドを記述する場合にはどうすればいいですか?
  • powershellのforeach-objectの-process{}の中で複数のコマンドを書く方法を教えてください。コマンドが長くなりすぎる場合にはどのように改行すればいいのでしょうか?
  • powershellのforeach-objectの-process{}の中に複数のコマンドを書きたいですが、コマンドが長くなりすぎてしまいます。改行する方法を教えてください。
回答を見る
  • ベストアンサー

powershell で-processの中に複数

powershell で-processの中に複数行書きたいが長くなる foreach-object の -process{}の中に複数のコマンドを書きたいのですが、長くなります。 foreach-object -process{command1; command2; command3; command4; command10 } foreach-object -process{ command1; command2; command3; command4; command10 } なんか適当に折り返して書く方法ありませんか? `で出来ると書いているサイトがありましたが、このケースでは無理でした。

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.1

bshの様に、何も付けずに改行して通りませんか? 「;」は、一行へまとめたい時に明記するものかなと思ってました。 Get-Process | foreach-object -process { echo $_.name echo $_.cpu }

関連するQ&A

  • Powershell プロセス二重起動

    PowerShell初心者です。 自身で起動中のスクリプトと同じコマンドで実行しているプロセスを検知し、他方のプロセスをkillしようと考えております。要は二重起動のチェックをしたいです。 現在コマンドラインで確認しているのですがどうもうまくいきません。 やろうとしている操作は以下です。 (1)ファイルにプロセス情報を出力。 PS C:\> $tempfile = "C:\pswork\servicemon\temp.log" PS C:\> Get-WmiObject win32_process ` | select Name, ProcessId, CommandLine ` | sort Name ` | Format-Table -AutoSize ` | Out-File -FilePath $tempfile -width 1000 (2)自分のPID以外のプロセス情報を取得 PS C:\> $mypid = $PID PS C:\> $killpidtmp = Get-Content $tempfile | Select-String -Pattern ".*powershell.exe.*svmon131_loop.*" |Select-String -NotMatch -Pattern "\s$mypid\s" PS C:\> echo $killpidtmp powershell.exe 2024 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command C:\pswork\servicemon\svmon131_loop.ps1 (3)splitでプロセス番号のみを取得。 PS C:\> $killpid = echo $killpidtmp |% {$($_-split(" "))[1]} PS C:\> echo $killpid ★ここがうまく取得できません。空白しか取得できていません。 (4)最終的には取得したPIDでプロセスを終了。 PS C:\pswork\servicemon> Stop-Process -ID $killpid Bシェルで同様のスクリプトがあったので、それを参考にPowerShellで書こうとしているので、 そもそも無理があるのかもしれないかと考えています。 上記の方法でなくてもよいので、二重起動のチェックと該当プロセスの停止で参考となる情報があれば教えて頂きたいです。

  • powershell で配列を順次に扱うには?

    powershell で配列を順次に扱うには? $aaa = Get-ChildItem -Path "c:¥Program Files" -name として、 $aaaにプログラムファイルズの下をオブジェクト形式で退避したとします。 $aaaを見てみると、 Adobe Hidemaru Java Lhaplus Microsoft Office などが入っています。 この$aaaをインプットとして、 ForEach-Object -InputObject $aaa -Process { echo ここに何を書けば良いですか? } アウトプットが下記のように$aaaの中身になれば良いです。 Adobe Hidemaru Java Lhaplus Microsoft Office ※このプログラム自体に意味はありません。 一旦退避したオブジェクトを順次に読むテストをしたいだけです。 これができたら、 -name オプションを外して、Mode,LastWriteTime,Length,Name をそれぞれ個別に echo してみたいです。

  • powershellのforeachの動作

    powershellにおける"foreach"の動作について2点質問です。 動作環境はWindows7 SP1。 powershellのバージョンは以下の通りです。 PS C:\> $PSVersionTable Name Value ---- ----- CLRVersion 2.0.50727.5472 BuildVersion 6.1.7601.17514 PSVersion 2.0 WSManStackVersion 2.0 PSCompatibleVersions {1.0, 2.0} SerializationVersion 1.1.0.1 PSRemotingProtocolVersion 2.1 PS C:\> 【サンプル1】 test1.ps1 -------------------- $WEEK = "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" foreach ($x in $WEEK) { if ( $x -notmatch '^T' ) { continue } $x } -------------------- 実行結果は Tuesday Thursday となります。 【サンプル2】 test.lst -------------------- Sunday Monday Tuesday Wednesday Thursday Friday Saturday -------------------- test2.ps1 -------------------- Get-Content ".\test.lst" | foreach { $x = $_ if ( $x -notmatch '^T' ) { continue } $x } -------------------- 実行すると、何も出力されていません。 "notmatch"を"match"に変えて実行してみると、 Sunday Monday と出力されます。 どうも"continue"でループを抜けてしまっている様です。 ■質問1 サンプル1とサンプル2、やっている内容は同じだと思っていたのですが、何故こういう違いが起こるのでしょうか? また、サンプル1の"foreach"を"ForEach-Object"に変えて実行すると、 「式またはステートメントのトークン 'in' を使用できません。」 とエラーになってしまいます。 aliasを切ってあるはずなのですが・・・ PS C:\> alias foreach CommandType Name Definition ----------- ---- ---------- Alias foreach ForEach-Object PS C:\> ■質問2 同じコマンドを実行しているはずなのに、こういう事が起こるのでしょうか? よろしくお願いします。

  • power shellについて

    さっきpowershellで適当に「command」と打って実行したのですがよく意味がわかりません。このコマンドはどういうことをしているのですか?

  • powershellのelect-Object

    powershellですが、Get-xxxxの結果に対してSelect-Objectで取り出しています。 出力結果に文字列、$LISTの値をを追加、結合したいのですができません。 $LISTS='aaa','bbb','ccc' foreach($LIST in $LISTS) { Get-xxxxx $LIST -Properties hogeプロパティ | Select-Object -Expand hogeプロパティ } aaa,内容1 aaa,内容2 bbb,内容1 bbb,内容2  :  : ccc,内容3 というようにしないのですができなのでしょうか。 dir *.txt | select-object -expadn fullname とすると コマンドを実行したカレントディレクトのファイル名がフルパスで表示されます その結果の前でも後でもいいのですが、任意にの文字列を追加したいのですが、 できるのでしょうか。 1,c:\tmp\a.txt 2,c:\tmp\b.txt : 10,c:tmp\c.txt という具合です。 お願いします。

  • powershell でパラメータ的な変数 $_ の下の項目を扱うには

    powershell でパラメータ的な変数 $_ の下の項目を扱うには? $aaa = Get-ChildItem -Path "c:¥Program Files" この場合の $aaa を1レコードづつ回して、特定項目を抜き出す方法を教えてください。 $aaaを見てみると、 Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2010/06/30 12:00 Adobe d---- 2010/06/30 12:00 Hidemaru d---- 2010/06/30 12:00 Java d---- 2010/06/30 12:00 Lhaplus d---- 2010/06/30 12:00 Microsoft Office な感じです。 ここから、1レコード毎に個別に、またModeやNameの1項目毎に取り扱いたいです。 例えば あああ d---- Adobe あああ d---- Hidemaru あああ d---- Java あああ d---- Lhaplus あああ d---- Microsoft Office と出力したいとして、 ForEach-Object -InputObject $aaa -Process { echo "あああ"; echo ($_.Mode + " " + $_.Name) } というコマンドを打ってみましたが、うまく行きません。 一旦、シンプルに ForEach-Object -InputObject $aaa -Process { echo $_ } とすると、 Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2010/06/30 12:00 Adobe d---- 2010/06/30 12:00 Hidemaru d---- 2010/06/30 12:00 Java d---- 2010/06/30 12:00 Lhaplus d---- 2010/06/30 12:00 Microsoft Office と出力されました。 しかし、これは1件づつループしたのではなく、$aaaの塊が1回ドンと出てループはしていません。 ForEach-Object -InputObject $aaa -Process { echo "あああ"; echo $_ } と書いても、結果は あああ d---- 2010/06/30 12:00 Adobe あああ d---- 2010/06/30 12:00 Hidemaru あああ d---- 2010/06/30 12:00 Java あああ d---- 2010/06/30 12:00 Lhaplus あああ d---- 2010/06/30 12:00 Microsoft Office ではなく あああ d---- 2010/06/30 12:00 Adobe d---- 2010/06/30 12:00 Hidemaru d---- 2010/06/30 12:00 Java d---- 2010/06/30 12:00 Lhaplus d---- 2010/06/30 12:00 Microsoft Office です。 この場合の $aaa を1レコードづつ回して、特定項目を抜き出す方法を教えてください。

  • powershell で特定の文字を削除したい

    powershell でコマンドの学習をしており、どうしてもやりたいことが実現できないので御教示いただきたく存じます。 学習中のパソコンのOSはWindows 7 になります。 ■前提 以下のA.txt と B.txt と C.txt があります。  ・A.txt の中身   aaa   bbb   123   456   789  ・B.txt の中身   aaa   456  ・C.txt の中身   $PSV   $Object   A123456   123   456   789   6741 ■やりたいこと A.txt と B.txt を比較して差分結果を D.txt に出力します。 次に、D.txt の数値を行ごと削除するために C.txt を使って削除したいのですが、うまくいきません。 実行したコマンドは下記になります。 ・Powershell Compare-Object (Get-Content A.txt) (Get-Content B.txt) -PassThru | Out-File D.txt -encoding Default Get-Content D.txt | Select-String "C.txt" -NotMatch コマンドが思った動作にならないため、お知恵を拝借したいです。 よろしくお願いいたします。 追加質問: 二回に分けてコマンドを実行していますが、一回のコマンドで出来たりしますか?

  • XPで、プロセスをKILLするDOSからのコマンドは。

    WindowsXPです。 Ctr+Alt+Del で、タスクマネージャを起動してプロセスのところを見ると、いらないプロセスがあるので、これを終了させる際、今は、このタスクマネージャでプロセスを選択して、プロセス終了をしています。 これをMSDOSのプロンプトから、コマンドで実行できませんか。 たとえば、 Kill "イメージ名" などのように。 (これは適当に書いたので、このコマンドは間違っていますが) KILLしたいプロセスが複数あるので、バッチファイルにしてまとめてKILLしたいのです。 よろしくお願いします。

  • Powershell プログラミングについて

    サーバ管理をしている中で、日次で前日のイベントログを出力するプログラムを書きました。 初めてPowershellを使用し、ネットを観ながら見よう見まねで書いていたのですが、 ひとつ躓いてしまい・・・教えていただけないでしょうか? ---------------------------------------------------------------------------------- # system、application、securityのログを出力(ErrorとWarningのみ) $type = [string] $event = [system.diagnostics.eventLogEntry] $count = [int] $count = 0 foreach ($type in "system","application","security"){ # ログ取得 $event = get-EventLog -logname $type -after $start_time_yesterday -before $end_time_yesterday | ` Where-Object { $_.EntryType -eq "Warning" -or $_.EntryType -eq "Error" } | ` Where-Object { $_.EventID -ne "1111" -and $_.EventID -ne "5722" -and $_.EventID -ne "5719" }| ` Select-Object EntryType,EventID,TimeGenerated,Source,Message,HostName[$hostname] # テキストファイルに出力 $event >> $fPath ---------------------------------------------------------------------------------- このようなプログラムを書いたところ、 出力結果は以下のようになりました。 ---------------------------------------------------------------------------------- EntryType : Warning EventID : 14 TimeGenerated : 2012/10/10 8:54:05 Source : W32Time Message : タイム ソースとして使うドメイン コントローラを見つけることができません でした。15 分後に再試行します。 HostName[SAKURAI-PC] : ---------------------------------------------------------------------------------- HostName :[SAKURAI-PC] にするにはどのように書いたらよいのでしょうか? ご指導お願いいたします。

  • エクセルで複数のコマンドボタンの貼り付けについて

    エクセルで複数のコマンドボタンの貼り付けについての質問ですが、 VBの用に配列で貼り付け(Indexをつける)はできないのでしょうか? オブジェクト名に同じ名前を入れてもエラーになるだけで、配列にできません。 command_click (index)のようにする方法はありませんか?

専門家に質問してみよう