none
Deleted RRS feed

回答

  • 既に回答は付いていますが、別解を挙げてみます。

    $word = @(Get-Process -Name WINWORD -ErrorAction SilentlyContinue).Length -gt 0
    if($word)
    {
        Write-Host "WORDが起動しています。"
    }

    ErrorActionを指定することで、プロセスが存在しない場合のエラー表示を抑制しています。また、Get-Processコマンドレットは同名のプロセスが複数ある場合はすべて出力されるので、結果を@()演算子により配列化し、Lengthプロパティの値が0より大きいかどうかで、該当プロセスの存在をチェックしています。

    同様の処理を他のプロセスでも行うので、以下のように関数化すると便利かと思います。

    function Test-Process
    {
        param(
            [parameter(ValueFromPipeline = $true)]
            [string]
            $Name
        )
        process
        {
            @(Get-Process `
                -Name $Name `
                -ErrorAction SilentlyContinue
            ).Length -gt 0
        }
    }
    
    "WINWORD","EXCEL","POWERPNT","OUTLOOK","CLaunch" | 
        ForEach-Object {
            if(Test-Process -Name $_)
            {
                Write-Host "${_}が起動しています。"
            }
            else
            {
                Write-Host "${_}が起動していません。"
            }
        }

    2019年8月11日 17:39
    モデレータ
  • いまさらかもしれませんが・・・

    (Get-Process).Name -contains "WINWORD"
    (Get-Process).Name -contains "EXCEL"

    でもよいかと。
    起動していればTrueがかえってきます。

    2019年8月13日 1:20
  • 条件判定の部分のTrue、Falseを以下のように修正ください

    "True" → $True

    "False" → $False

    (Get-Process).Name -contains の戻り値はBoolenです。表示錠は"True"あるいは"False"と表示されますが、

    内部では$Trueあるいは$Falseのどちらかになります。

    2019年8月26日 0:51
  • $result = Get-Check-Process
    
        if ($result) {
            Exit
        }

    判定している個所を上記のように別変数(上記例では$result)に代入して判別してみてください。

    Get-Check-Process関数は呼び出されていますが、スコープが違うので変数に代入されていないのだと思います。

    2019年8月27日 0:34

すべての返信

  • Add-Type -Assembly System.Windows.Forms
    
    $excel      = Get-Process excel   | Where-Object {$_.Path -match ".*\\excel.exe$"}
    $word       = Get-Process winword | Where-Object {$_.Path -match ".*\\winword.exe$"}
    $powerpoint = Get-Process POWERPNT | Where-Object {$_.Path -match ".*\\POWERPNT.exe$"}
    $outlook    = Get-Process OUTLOOK | Where-Object {$_.Path -match ".*\\OUTLOOK.exe$"}
    $claunch    = Get-Process Claunch | Where-Object {$_.Path -match ".*\\CLaunch.exe$"}
    
    if($excel -ne $null){
        [System.Windows.Forms.MessageBox]::Show("Excelは起動されています")
    }
    if($word){
        [System.Windows.Forms.MessageBox]::Show("Wordは起動されています")
    }
    if($powerpoint){
        [System.Windows.Forms.MessageBox]::Show("PowerOiubtは起動されています")
    }
    if($outlook){
        [System.Windows.Forms.MessageBox]::Show("Outlookは起動されています")
    }
    if($claunch){
        [System.Windows.Forms.MessageBox]::Show("CLaunchは起動されています")
    }

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2019年8月11日 10:21
  • 既に回答は付いていますが、別解を挙げてみます。

    $word = @(Get-Process -Name WINWORD -ErrorAction SilentlyContinue).Length -gt 0
    if($word)
    {
        Write-Host "WORDが起動しています。"
    }

    ErrorActionを指定することで、プロセスが存在しない場合のエラー表示を抑制しています。また、Get-Processコマンドレットは同名のプロセスが複数ある場合はすべて出力されるので、結果を@()演算子により配列化し、Lengthプロパティの値が0より大きいかどうかで、該当プロセスの存在をチェックしています。

    同様の処理を他のプロセスでも行うので、以下のように関数化すると便利かと思います。

    function Test-Process
    {
        param(
            [parameter(ValueFromPipeline = $true)]
            [string]
            $Name
        )
        process
        {
            @(Get-Process `
                -Name $Name `
                -ErrorAction SilentlyContinue
            ).Length -gt 0
        }
    }
    
    "WINWORD","EXCEL","POWERPNT","OUTLOOK","CLaunch" | 
        ForEach-Object {
            if(Test-Process -Name $_)
            {
                Write-Host "${_}が起動しています。"
            }
            else
            {
                Write-Host "${_}が起動していません。"
            }
        }

    2019年8月11日 17:39
    モデレータ
  • いまさらかもしれませんが・・・

    (Get-Process).Name -contains "WINWORD"
    (Get-Process).Name -contains "EXCEL"

    でもよいかと。
    起動していればTrueがかえってきます。

    2019年8月13日 1:20
  • 条件判定の部分のTrue、Falseを以下のように修正ください

    "True" → $True

    "False" → $False

    (Get-Process).Name -contains の戻り値はBoolenです。表示錠は"True"あるいは"False"と表示されますが、

    内部では$Trueあるいは$Falseのどちらかになります。

    2019年8月26日 0:51
  • $result = Get-Check-Process
    
        if ($result) {
            Exit
        }

    判定している個所を上記のように別変数(上記例では$result)に代入して判別してみてください。

    Get-Check-Process関数は呼び出されていますが、スコープが違うので変数に代入されていないのだと思います。

    2019年8月27日 0:34