さて、下のスクリプトはもともとバッチを使用して作成されており、私はPSに変換しました。それは現時点では機能しますが、これを行うにはより良い方法がありますか?特定のプログラムをインストールするPowershellスクリプト。スクリプトは機能しますが、すべてを行うためのよりよい方法はありますか?
まず、オペレーティングシステム32または64ビットがチェックされますので、適切なインストールパスを取得します。それから古いインストールフォルダがあるかどうかをチェックしたい場合は、スクリプトが停止するはずです。 古いインストールフォルダがない場合は、作成したレジストリファイルをインポートします。 その後、ドライブH:をC:\ Tempに変更してから、msiファイルをインストールします。 msiファイルがインストールされると、適切な場所に "program.exe"というインストールパスがあるかどうかをチェックしたいと考えています。 すべてが問題ない場合は、GCTIファイル用のフォルダを作成し、必要なファイルをすべてコピーします。
スクリプトの最後には、さらにいくつかのファイルのコピーが残っています。
このスクリプトは必要なインストールファイルと同じフォルダにあり、このプログラムをインストールするときにこのフォルダをリモートコンピュータにコピーする必要があります。私はこのスクリプトを少し変更して、最初にインストールするコンピュータを尋ねてから、すべてのファイルを特定のリモートコンピュータにコピーし、リモートコンピュータでこのスクリプトを実行するようにします。
#Let's check is OS 32 or 64 bit
$bit = "C:\Windows\syswow64\."
$isit64bit = Test-Path $bit
If ($isit64bit -eq $True) {$installpath = "C:\Program Files (x86)"}
Else {$installpath = "C:\Program Files"}
#Let's check is there old installation folder
$Program = $installpath+"\Program\"
$Programtest = Test-Path $Program
If ($Programtest -eq $false) {Write-Host "None found, let's continue the installation"}
Else {Write-Host "Old installation folder found, remove files and try again" Exit}
# Create ODBC-connection in registry
Start-Process -FilePath Reg -ArgumentList import, ".\Progserver_ODBC.reg" -Wait -WindowStyle Minimized
#Let's check if previous action is ok
$registry = "HKLM:\SOFTWARE\WOW6432Node\ODBC\ODBC.INI\Progserver\"
$registrycheck = Test-Path $registry
If ($registrycheck -eq $True) {Write-Host "Registrychange is ok"}
Else {Write-Host "Registrychange failed" Exit}
# Rename Drive "H:" C:\temp
New-PSDrive -Name "H" -PSProvider 'FileSystem' -Root C:\temp
# Install the msi
Start-Process -FilePath msiexec -ArgumentList /i, "Program-4.3.32.msi", /quiet -Wait
$install = "C:\Program Files (x86)\PathtoProgram.exe"
$installcheck = Test-Path $install
If ($installcheck -eq $True) {Write-Host "Installation succeeded"}
Else {Write-Host "Installation failed." Exit}
# Create GCTI's
$GCTI = "$installpath\PathToGCTI\"
If (Test-Path $GCTI) {Write-Host "GCTI folder already exists"}
Else {Write-Host "Create GCTI folder"} New-Item -ItemType Directory -Path $GCTI -Force
Copy-Item .\PathtoGCTI\* -Destination $GCTI -Recurse -Force
Write-Host "Copied GCTI-files"
# Copy program.ini ja vec.ini
Write-Host "Copying program.ini ja vec.ini"
Copy-Item .\PathToProgram.ini $installpath\PathToProgram.ini
Copy-Item .\PathToVec.ini $installpath\PathToVec.ini
# Change folder rights for the installation folder
cacls.exe $installpath\Program /T /E /G "All Users:C"
# Copy files from version 4.3.26
Copy-Item .\PathToProgram.exe $installpath\PathToProgram -Force
# Copy files
Copy-Item .\PathToFiles\* $installpath\PathToProgram\ -Force -Recurse
Set-ItemProperty $installpath\PathToProgram\graph\* -Name isreadonly $true
#Remove PSDrive
Remove-PSDrive -Name "H"