2017-12-14 15 views
0

ppkgファイルを使用して新しいデバイスにソフトウェアをインストールするための展開スクリプトをビルドします。変数を使用して複数のソフトウェアを展開するPowershellスクリプト

スクリプトは、どのドライブがUSBドライブであるかを調べ、ソフトウェアをローカルの一時フォルダにコピーし、以下に示すように一連の変数に従って実行します。

スクリプトを単純化してコードを7回繰り返すのではなく、必要なソフトウェアを7回ループするだけです。私は配列を試しましたが、私はそれを完全に理解していないと思います。

これは繰り返しのコードで、これまで私のスクリプトです:私はあなたが変数にとる関数を作る示唆

#SOE application Variables 

#applcation1 CM_client 
$app1name = "Config Manager Client 1706" 
$app1skip = "no" 
$app1path = "$env:SystemDrive\temp\soe\application_installs\app1\CM_client_inst_1706\" 
$app1runcommand = "clientx64.bat" 
$app1arguments = "" 
#applcation2 
$app2name = "Office 2016 Pro Plus" 
$app2skip = "no" 
$app2path = "$env:SystemDrive\temp\soe\application_installs\app2\O2016\" 
$app2runcommand = "setup.exe" 
$app2arguments = "/configure configuration.xml" 
#log Folder 
$datetime = Get-Date -format "yyyy.MM.dd-HH.mm.ss" 
$logpath = "$env:ALLUSERSPROFILE\SOEInst_ppkg\$datetime" 
New-Item -Path $logpath -ItemType Directory -ErrorAction SilentlyContinue 

#Transcript Start 
Start-Transcript -Path $logpath\SOE-app-installer-ppkg-$datetime.log 

#Timer Function 
$pkgremovetime = Get-Date -format "HH:mm:ss" 
write-host "Script Start Time - $pkgremovetime" 

#Find USB Drive 
Write-host Discovering USB Drive 

$drives = (GET-WMIOBJECT –query “SELECT * from win32_logicaldisk").DeviceID 

foreach ($drive in $drives) { 

      $usbdrive = (dir $drive USBIMG.FILE | Select-Object -Unique "USBIMG.FILE") 
      if ($usbdrive -match "USBIMG.FILE*") { 
        $datadrive = $drive 
        } 
      } 

Write-host Found $datadrive is the USB drive 

#Copy Applications to Local Drive 
Write-Host Creating Installer Folder 
New-Item -Path $env:SystemDrive\temp\SOE -ItemType Directory 
Copy-Item $datadrive\application_installs $env:SystemDrive\temp\soe -Recurse -Verbose 

#Install Applications 
#Application 1 
    if ($app1skip -eq "no") { 
    if ($app1arguments) { #Arguments Variable Populated 
     Write-Host Installing Applcation 1 `($app1name`) 
     $app1 = Start-Process -Wait -FilePath $app1path$app1runcommand -ErrorAction Continue -ArgumentList $app1arguments -WindowStyle Normal 
      if ($app1.ExitCode -eq "0") { 
       Write-Host $app1name Installed ok 
       } Else { 
        Write-host $app1name install exited with code $app1.ExitCode 
        } 
       } 
      }Else { #Argurments Variable Empty 
       Write-Host Installing Applcation 1 `($app1name`) 
       $app1 = Start-Process -Wait -FilePath $app1path$app1runcommand -ErrorAction Continue -WindowStyle Normal 
       if ($app1.ExitCode -eq "0") { 
        Write-Host $app1name Installed ok 
        } Else { 
         Write-host $app1name install exited with code $app1.ExitCode 
       } 
      } 


#Application 2 
if ($app2skip -eq "no") { 
    if ($app2arguments) { #Arguments Variable Populated 
     Write-Host Installing Applcation 2 `($app2name`) 
     $app2 = Start-Process -Wait -FilePath $app2path$app2runcommand -ErrorAction Continue -ArgumentList $app2arguments -WindowStyle Normal 
      if ($app2.ExitCode -eq "0") { 
       Write-Host $app2name Installed ok 
       } Else { 
        Write-host $app2name install exited with code $app2.ExitCode 
        } 
       } 
      }Else { #Argurments Variable Empty 
       Write-Host Installing Applcation 2 `($app2name`) 
       $app2 = Start-Process -Wait -FilePath $app2path$app2runcommand -ErrorAction Continue -WindowStyle Normal 
       if ($app2.ExitCode -eq "0") { 
        Write-Host $app2name Installed ok 
        } Else { 
         Write-host $app2name install exited with code $app2.ExitCode 
       } 
      } 
#cleanup 

Remove-Item $env:SystemDrive\temp\soe -Recurse -Force -Verbose 

#get end time 
$pkgremovetime_end = Get-Date -format "HH:mm:ss" 

#calculate time difference 
$timetaken = New-TimeSpan $pkgremovetime $pkgremovetime_end 
    if ($timetaken.Seconds -lt 0) { 
$Hrs = ($timetaken.Hours) + 23 
$Mins = ($timetaken.Minutes) + 59 
$Secs = ($timetaken.Seconds) + 59 } 
    else { 
$Hrs = $timetaken.Hours 
$Mins = $timetaken.Minutes 
$Secs = $timetaken.Seconds } 
$Difference = '{0:00}:{1:00}:{2:00}' -f $Hrs,$Mins,$Secs 

#log time difference 
write-host "Script End Time - $pkgremovetime_end" 
Write-Host "Total time taken $difference" 

#Transcript End 
Stop-Transcript 
+1

? –

+0

何をしているのかを表現するのに最適なように、それをカットして、あなたを幸せにすることを願って..... –

+0

編集をありがとう。 Javascript/HTMLコードの書式設定をやめてから、やめてください。これはJavascriptやHTMLではありません。通常のコードでは、ツールバーの** {} **ボタンを使用します。ありがとう。 –

答えて

1

。私は、インストール・コードの簡単な比較を行なったし、このようなものは

function installApplication{ 
    Param($skip, $arguments, $name, $path, $runcommand) 
    if ($skip -eq "no"){ 
     if ($arguments){ 
      write-host "Installing Application $appname" 
      $app = Start-Process -Wait -FilePath $path$runcommand -ErrorAction.... 
      if($app.ExitCode -eq "0"){ 
      .... 
      .... 
} 

を動作するはずというように、あなたは、あなたの入力引数は、関数のパラメータを置き換えます

installApplication $app1skip $app1arguments $app1name $app1path $app1runcommand 
installApplication $app2skip $app2arguments $app2name $app2path $app1runcommand 

を使用して関数を呼び出すことができますそれらを渡すか、-skip $ app1skipを使ってパラメータを割り当てることができます。

同じコードを何回も繰り返す場合は、diffcheckerのようなものに投げ込み、コードを関数に入れて、すべての違いを変数に置き換えることをおすすめします。

あなたがここにあなたのコードを参照することができますhttps://www.diffchecker.com/FxAIdD6g(1日のみ)あなたは小さな代表的なサンプルの代わりに、100 +ラインコードダンプにこれをダウン蒸留ことができませんでした

+0

私はそれを試してみましょう、非常に素晴らしいソリューション感謝のように見えます。私は自分のコードでいくつかの他の問題を見つけ、それをきれいにして関数を調べます。 –

関連する問題