2017-11-07 13 views
0

を使用して機能をインストールします。チェックと私は.BATファイル使用して、プロセスの下に自動化しようとしているバッチファイル

注:掲載コードの下は適切ではありませんが、彼らは私が試したコードです。

  1. ファイルがインストールされていないことをCMDホストに書き込みをインストールしていない場合は、プログラムが
  2. をインストールされている場合は、最初のチェック。
  3. インストールされていない場合は、機能をインストールしてください。
  4. 最後に、cmd console hostのインストールが成功したか、失敗しました。

の.batコード:

@echo off 
title Check and Install MS Visual C++ Redistributable 2015 
echo Checking MS Visual C++ Redistributable 2015 ..... 

@ECHO OFF 

REM LOG LOCATION 
SET LOGPATH=D:\Tool\InstallC++Log\ 
IF NOT EXIST %LOGPATH% MD %LOGPATH% 

SET ThisScriptsDirectory=%~dp0 
REM PowerShellScriptPath=C:\temp\Install_Program_MS_Visual_C++_x86.ps1 
SET PowerShellScriptPath=C:\temp\Checking_Program.ps1 
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"; >> %LOGPATH%%INSTALLPATCH%.log 

pause 

C:以下\ tempに\のChecking_Program.ps1コード:

$tempdir = Get-Location 
$tempdir = $tempdir.tostring() 
$appToMatch = 'Microsoft Visual C++ 2015 Redistributable (x86)' 
$msiFile = $tempdir+"\microsoft.interopformsredist.msi" 
$msiArgs = "-qb" 

function Get-InstalledApps 
{ 
    if ([IntPtr]::Size -eq 4) { 
     $regpath = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*' 
    } 
    else { 
     $regpath = @(
      'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*' 
      'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' 
     ) 
    } 
    Get-ItemProperty $regpath | .{process{if($_.DisplayName -and $_.UninstallString) { $_ } }} | Select DisplayName, Publisher, InstallDate, DisplayVersion, UninstallString |Sort DisplayName 
} 

$result = Get-InstalledApps | where {$_.DisplayName -like $appToMatch} 


If ($result -eq $null) { 

    Write-Host "Could not find the Microsoft Visual C++ 2015 Redistributable (x86). Installing the Program..." 
     } 

    } 

この後、私は、コマンドプロンプトのエントリを見てみたいもの機能のインストール。以下PowerShellのコードのインストール

@echo off 
title Installing MS Visual C++ Redistributable 2015 
echo ..... 

@ECHO OFF 

REM LOG LOCATION 
SET LOGPATH=D:\Tool\InstallC++Log\ 
IF NOT EXIST %LOGPATH% MD %LOGPATH% 

SET ThisScriptsDirectory=%~dp0 
REM PowerShellScriptPath=C:\temp\Install_Program_MS_Visual_C++_x86.ps1 
SET PowerShellScriptPath=C:\temp\Checking_Program_Install.ps1 
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"; >> %LOGPATH%%INSTALLPATCH%.log 

pause 

は.batのコードをインストールしたらインストール

$computer = $env:COMPUTERNAME 
$sourcefile = "C:\temp\C++\vc_redist.x86.exe" 


    Invoke-Command -ComputerName $computer -ScriptBlock {Start-Process 'C:\temp\C++\vc_redist.x86.exe' -ArgumentList /s -Verb runas -Wait } 

を、私はその機能が正常にインストールされていると言って、コマンドプロンプトメッセージを取得する必要があります。助けてください 。

INSTALL.CMD

@ECHO off 
TITLE Check and Install MS Visual C++ Redistributable 2015 

SET LOGPATH=D:\Tool\InstallC++Log 
IF NOT EXIST %LOGPATH% MD %LOGPATH% 

SET PowerShellScriptPath=C:\Temp\Install.ps1 
PowerShell -NoProfile -ExecutionPolicy Bypass -File "%PowerShellScriptPath%" >> %LOGPATH%\Redist.log 

PAUSE 

それは一度だけ呼び出される関数を宣言する必要があります:

+1

なぜあなたは '' - コマンドを使用して「&PS1」 'の代わりにされています - ファイル "ps1" '? – TheIncorrigible1

+0

再配布可能なインストールは、それ自身の上にインストールしないか、すでに存在する場合は無害に上書きするのに十分なほど巧妙ではありませんか? – Compo

+0

@ TheIncorrigible1、私はそれを私自身で試しています、グーグルをチェックしています。私は.batファイルを準備することに気づいていません。私はこの.batファイルでプログラムをチェックし、存在しなければインストールしますが、cmdと実行可能ファイルを開くことでインタラクティブにします。 – DBOn

答えて

1

だから、それがインストールされていますかどうかをチェックしながら、あなたはいくつかの無意味なコメントと宣言していました。現在のディレクトリを一時フォルダとして使うのは悪い習慣だと私は思う。デフォルトを使用するか、デフォルトを作成する必要があります。最終的に、あなたの例では、意味がありませんので、私はそれのいくつかの意味を作ってみました:

Install.ps1

#Requires -Version 3 

$TargetApp = 'Microsoft Visual C++ 2015 Redistributable (x86)' 

$RegPath = @('HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*') 
If ([Environment]::Is64BitOperatingSystem) 
{ 
    $RegPath += 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' 
} 

$Result = Get-ItemProperty -Path $RegPath | 
    Where-Object { $PSItem.DisplayName -eq $TargetApp -and 
       $PSItem.UninstallString } | 
    Select-Object -Property @('DisplayName','Publisher','InstallDate','DisplayVersion','UninstallString') 

If ($Null -eq $Result) 
{ 
    Write-Output "Could not find '$TargetApp'. Installing the Program..." 
    [email protected]{ 
     FilePath='C:\Temp\C++\vc_redist.x86.exe' 
     ArgumentList='/s' 
     Verb='RunAs' 
     Wait=$True 
    } 
    Start-Process @Params 
} 
+0

ありがとうございます@ TheIncorrigible1、今確認します。 – DBOn

関連する問題