11778


昨日と同じ質問で申し訳ありません。  
**[https://ja.stackoverflow.com/questions/11732/シェルスクリプトでnode-
jsがすでにインストール済みかチェックするには/11740#11740](https://ja.stackoverflow.com/questions/11732/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7node-
js%E3%81%8C%E3%81%99%E3%81%A7%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%B8%88%E3%81%BF%E3%81%8B%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF/11740#11740)**

Mac側ではシェルスクリプトにて、Node.jsのインストール済み確認ができ、  
ファイルサーバーを構築する事ができました。

Windowsを使用しているデザイナーさんもいるため  
PowerShellでも同じことをしたいです。  
ですがアプリのインストール一覧の取得は検索でヒットしますが、指定アプリのインストール済みをチェックする方法がわかりません。

また、できるだけデザイナーさんのインストールの手間などを省くために  
PowerShellを使用してスクリプトを作っていますが、結構苦戦しています。

Windows上でシェルスクリプトを実行するのに、PowerShell以外のツールで  
おすすめがあれば教えていただけませんか？


CC BY-SA 3.0
2015-06-26T11:13:27.423
11777
2015-06-26T21:45:44.143
2017-04-13T12:52:39.113
-1
5261
question
windows node.js powershell shellscript
PowerShellにてアプリのインストールチェックをするには？


Windows vista 以降のwindowsの場合パスが通っているコマンドの検索に`WHERE`を使うことができます。  
それを利用して、

[code]

    if (where.exe  node 2> $null) { # コマンドがある場合
        #Write-Output 'Find!'
    } else {  #コマンドがない場合
        #Write-Error 'Error!'
    }
    
[/code]

のようにnodeコマンドが使える場合と使えない場合のスクリプトを書くことができます。

* * *

$lastexitcode を使う方法

[code]

    where.exe /Q node
    if ($lastexitcode -eq 0) { # コマンドがある場合
        Write-Output 'Find!'
    } else {  #コマンドがない場合
        #Write-Error 'Error!'
    }
    
[/code]


CC BY-SA 3.0
2015-06-26T12:06:34.573
11778
2015-06-26T21:45:44.143
2015-06-26T21:45:44.143
5044
5044
11777
answer


無事できました。

■教えていただいた最適な方法

[code]

    if (where.exe  node 2> Out-Null) { # コマンドがある場合
        #Write-Output 'Find!'
        echo "Find"
    } else {  #コマンドがない場合
        #Write-Error 'Error!'
        echo "None"
         Invoke-WebRequest -Uri https://nodejs.org/dist/v0.12.5/x64/node-v0.12.5-x64.msi -OutFile ./node.msi
     ./node.msi -ms
    }
    
[/code]

■自分で調べて作ってみた方法

[code]

    $exist = 0
    $path = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    $wow = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
    $patharray = ("HKLM:" + $path),("HKCU:" + $path)
    if(Test-Path $wow){$patharray += $wow}
    Get-ChildItem -Path $patharray | foreach {
    $CurrentKey = (Get-ItemProperty -Path $_.PsPath) |
        ?{$_.systemcomponent -ne 1 -and $_.parentkeyname -eq $null} |
        sort displayname |
        select DisplayName
      echo $CurrentKey
      if ($CurrentKey -match 'Node.js') {
         $exist = 1
         echo "*****NodeJs OK*****"
         echo $exist
      }
    }
    
    
    if($exist -eq 1){
         echo "NodeJs がありました。"
    }
    else{
         echo "NodeJs のインストールが必要です。。"
         Invoke-WebRequest -Uri https://nodejs.org/dist/v0.12.5/x64/node-v0.12.5-x64.msi -OutFile ./node.msi
         ./node.msi -ms
    }
    
[/code]


CC BY-SA 3.0
2015-06-26T12:21:40.017
11780
2015-06-26T12:21:40.017
5261
11777
answer