winrt: Add more Powershell logging to RT install
authorMark Young <marky@lunarg.com>
Tue, 31 May 2016 20:34:08 +0000 (14:34 -0600)
committerMark Young <marky@lunarg.com>
Tue, 31 May 2016 20:36:31 +0000 (14:36 -0600)
RT install Powershell script was using echo.  Now use transcript
recording (which will also include OS, Powershell version, and other
info).  Also, use Write-Host, Write-Warning, and Write-Error to
make errors and warnings more obvious.

NOTE: This includes intentional debug code enablement so I can
retrieve an RT install that does not remove a copy of the
Powershell log file.  This will be fixed quickly after the RT install
is generated on CruiseControl.

windowsRuntimeInstaller/ConfigLayersAndVulkanDLL.ps1

index 2881932..0fd7aa4 100644 (file)
@@ -39,13 +39,24 @@ Param(
  [int]$ossize\r
 )\r
 \r
+# Clear any pre-existing errors\r
+$Error.Clear();\r
+\r
 # Start logging\r
 $log=$Env:Temp+"\VulkanRT"\r
 New-Item -ItemType Directory -Force -Path $log | Out-Null\r
 $logascii=$log+"\ConfigLayersAndVulkanDLL.log"\r
+\r
+# Temp to be used for debugging failure to install issue\r
+$logascii2=$Env:Temp+"\ConfigLayersAndVulkanDLL_debug.log"\r
+\r
 $log=$log+"\ConfigLayersAndVulkanDLL16.log"\r
-echo "ConfigLayersAndVulkanDLL.ps1 $majorabi $ossize" >$log\r
-(Get-Date).ToString() >>$log\r
+\r
+start-transcript -path $log\r
+\r
+Write-Host "ConfigLayersAndVulkanDLL.ps1 called with inputs of : $majorabi $ossize"\r
+$startTime=Get-Date\r
+Write-Host "Start time : $startTime"\r
 \r
 $vulkandll = "vulkan-"+$majorabi+".dll"\r
 $windrive  = $env:SYSTEMDRIVE\r
@@ -96,7 +107,7 @@ function notNumeric ($x) {
 \r
 function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)\r
 {\r
-   echo "UpdateVulkanSysFolder $dir $writeSdkName" >>$log\r
+   Write-Host "UpdateVulkanSysFolder $dir $writeSdkName"\r
 \r
    # Push the current path on the stack and go to $dir\r
    Push-Location -Path $dir\r
@@ -108,33 +119,39 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
    # Find all vulkan dll files in this directory\r
    dir -name vulkan-$majorabi-*.dll |\r
    ForEach-Object {\r
-       echo "File $_" >>$log\r
+       Write-Host  "File $_"\r
        if ($_ -match "=" -or\r
            $_ -match "@" -or\r
            $_ -match " " -or\r
-           ($_.Split('-').count -lt 6)  -or\r
-           ($_.Split('-').count -gt 8))\r
+           ($_.Split('-').count -lt 6) -or\r
+           ($_.Split('-').count -gt 8) -or\r
+           !$?)\r
        {\r
            # If a file name contains "=", "@", or " ", or it contains less then 5 dashes or more than\r
            # 7 dashes, it wasn't installed by the Vulkan Run Time.\r
            # Note that we need to use return inside of ForEach-Object is to continue with iteration.\r
-           echo "ERROR: Rejected $_ - bad format" >>$log\r
+           Write-Warning "Ignoring $_ - bad format"\r
+\r
+           # Not a real error, so just clear it for now.\r
+           $Error.Clear();\r
+\r
+           # NOTE: Inside a ForEach-Object block, the 'return' call behaves like a 'continue' for a For loop\r
            return\r
        }\r
-       if (!$?) {\r
-           echo "ERROR: UpdateVulkanSysFolder object $_ is bad format" >>$log;\r
-       }\r
 \r
        # If the corresponding vulkaninfo is not present, it wasn't installed by the Vulkan Run Time\r
        $vulkaninfo=$_ -replace ".dll",".exe"\r
        $vulkaninfo=$vulkaninfo -replace "vulkan","vulkaninfo"\r
-       if (-not (Test-Path $vulkaninfo)) {\r
-           echo "ERROR: Rejected $_ - vulkaninfo not present" >>$log\r
+       if (-not (Test-Path $vulkaninfo) -or\r
+          !$?) {\r
+           Write-Warning "Rejected $_ - $vulkaninfo not present"\r
+\r
+           # Not a real error, so just clear it for now.\r
+           $Error.Clear();\r
+\r
+           # NOTE: Inside a ForEach-Object block, the 'return' call behaves like a 'continue' for a For loop\r
            return\r
        }\r
-       if (!$?) {\r
-           echo "ERROR: UpdateVulkanSysFolder failed generating vulkaninfo exe name" >>$log;\r
-       }\r
 \r
        $major=$_.Split('-')[2]\r
        $majorOrig=$major\r
@@ -177,31 +194,62 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
               $prebuildno="z"*10\r
           }\r
        }\r
-       echo "Version $majorOrig $minorOrig $patchOrig $buildnoOrig $prereleaseOrig $prebuildnoOrig" >>$log\r
+       Write-Host "Version $majorOrig $minorOrig $patchOrig $buildnoOrig $prereleaseOrig $prebuildnoOrig"\r
        if (!$?) {\r
-           echo "ERROR: UpdateVulkanSysFolder during version parsing" >>$log;\r
+           Write-Warning "Ignoring version $majorOrig $minorOrig $patchOrig $buildnoOrig $prereleaseOrig $prebuildnoOrig"\r
+\r
+           # Not a real error, so just clear it for now.\r
+           $Error.Clear();\r
+\r
+           # NOTE: Inside a ForEach-Object block, the 'return' call behaves like a 'continue' for a For loop\r
+           return\r
        }\r
 \r
        # Make sure fields that are supposed to be numbers are numbers\r
        if (notNumeric($major)) {\r
-           echo "ERROR: Rejected $_ - bad major" >>$log\r
+           Write-Warning "Ignoring $_ - bad major"\r
+\r
+           # Not a real d, so just clear it for now.\r
+           $Error.Clear();\r
+\r
+           # NOTE: Inside a ForEach-Object block, the 'return' call behaves like a 'continue' for a For loop\r
            return\r
        }\r
        if (notNumeric($minor)) {\r
-           echo "ERROR: Rejected $_ - bad minor" >>$log\r
+           Write-Warning "Ignoring $_ - bad minor"\r
+\r
+           # Not a real error, so just clear it for now.\r
+           $Error.Clear();\r
+\r
+           # NOTE: Inside a ForEach-Object block, the 'return' call behaves like a 'continue' for a For loop\r
            return\r
        }\r
        if (notNumeric($patch)) {\r
-           echo "ERROR: Rejected $_ - bad patch" >>$log\r
+           Write-Warning "Ignoring $_ - bad patch"\r
+\r
+           # Not a real error, so just clear it for now.\r
+           $Error.Clear();\r
+\r
+           # NOTE: Inside a ForEach-Object block, the 'return' call behaves like a 'continue' for a For loop\r
            return\r
        }\r
        if (notNumeric($buildno)) {\r
-           echo "ERROR: Rejected $_ - bad buildno" >>$log\r
+           Write-Warning "Ignoring $_ - bad buildno"\r
+\r
+           # Not a real error, so just clear it for now.\r
+           $Error.Clear();\r
+\r
+           # NOTE: Inside a ForEach-Object block, the 'return' call behaves like a 'continue' for a For loop\r
            return\r
        }\r
        if (notNumeric($prebuildno)) {\r
            if ($prebuildno -ne "z"*10) {\r
-               echo "ERROR: Rejected $_ - bad prebuildno" >>$log\r
+               Write-Warning "Ignoring $_ - bad prebuildno"\r
+\r
+               # Not a real error, so just clear it for now.\r
+               $Error.Clear();\r
+\r
+               # NOTE: Inside a ForEach-Object block, the 'return' call behaves like a 'continue' for a For loop\r
                return\r
            }\r
        }\r
@@ -214,11 +262,10 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
        $prebuildno = $prebuildno.padleft(10,'0')\r
 \r
        # Add a new element to the $VulkanDllList array\r
-       echo "Adding $_ to Vulkan dll list " >>$log\r
+       Write-Host "Adding $_ to Vulkan dll list "\r
        $script:VulkanDllList+="$major=$minor=$patch=$buildno=$prebuildno=$prerelease= $_ @$majorOrig@$minorOrig@$patchOrig@$buildnoOrig@$prereleaseOrig@$prebuildnoOrig@"\r
-\r
        if (!$?) {\r
-           echo "ERROR: UpdateVulkanSysFolder adding DLL $_ to list" >>$log;\r
+           Write-Error "Error: UpdateVulkanSysFolder adding DLL $_ to list"\r
        }\r
    }\r
 \r
@@ -229,31 +276,28 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
 \r
         # Sort the list. The most recent vulkan-*.dll will be in the last element of the list.\r
         [array]::sort($script:VulkanDllList)\r
-\r
         if (!$?) {\r
-           echo "ERROR: UpdateVulkanSysFolder sorting DLL list" >>$log;\r
+           Write-Error "Error: UpdateVulkanSysFolder sorting DLL list" \r
         }\r
 \r
         # Put the name of the most recent vulkan-*.dll in $mrVulkanDLL.\r
         # The most recent vulkanDLL is the second word in the last element of the\r
         # sorted $VulkanDllList. Copy it to $vulkandll.\r
         $mrVulkanDll=$script:VulkanDllList[-1].Split(' ')[1]\r
-        echo "copy $mrVulkanDll $vulkandll" >>$log\r
+        Write-Host "Copying $mrVulkanDll $vulkandll"\r
         Copy-Item $mrVulkanDll $vulkandll -force\r
-\r
         if (!$?) {\r
-           echo "ERROR: UpdateVulkanSysFolder encountered error during copy $mrVulkanDll $vulkandll" >>$log;\r
+           Write-Error "Error: UpdateVulkanSysFolder encountered error during copy $mrVulkanDll $vulkandll"\r
         }\r
 \r
         # Copy the most recent version of vulkaninfo-<abimajor>-*.exe to vulkaninfo.exe.\r
         # We create the source file name for the copy from $mrVulkanDll.\r
         $mrVulkaninfo=$mrVulkanDll -replace ".dll",".exe"\r
         $mrVulkaninfo=$mrVulkaninfo -replace "vulkan","vulkaninfo"\r
-        echo "copy $mrVulkaninfo vulkaninfo.exe" >>$log\r
+        Write-Host "Copying $mrVulkaninfo vulkaninfo.exe"\r
         Copy-Item $mrVulkaninfo vulkaninfo.exe -force\r
-\r
         if (!$?) {\r
-           echo "ERROR: UpdateVulkanSysFolder encountered error during copy $mrVulkaninfo vulkaninfo.exe" >>$log;\r
+           Write-Error "Error: UpdateVulkanSysFolder encountered error during copy $mrVulkaninfo vulkaninfo.exe"\r
         }\r
 \r
         # Create the name used in the registry for the SDK associated with $mrVulkanDll.\r
@@ -271,18 +315,17 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
         if ($prebuildno -ne "") {\r
             $sdktempname=$sdktempname + "." + $prebuildno\r
         }\r
-        echo "sdkname = $sdktempname" >>$log\r
 \r
+        Write-Host "sdkname = $sdktempname"\r
         if (!$?) {\r
-           echo "ERROR: UpdateVulkanSysFolder encountered error generating temp SDK name" >>$log;\r
+           Write-Error "Error: UpdateVulkanSysFolder encountered error generating SDK name"\r
         }\r
     }\r
 \r
     # Return to our previous folder\r
     Pop-Location\r
-\r
     if (!$?) {\r
-       echo "ERROR: UpdateVulkanSysFolder popping location" >>$log;\r
+       Write-Error "Error: UpdateVulkanSysFolder popping location"\r
     }\r
 \r
     # Only update the overall script-scope SDK name if we're told to\r
@@ -296,25 +339,23 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
 # We only care about SYSWOW64 if we're targeting a 64-bit OS\r
 if ($ossize -eq 64) {\r
     # Update the SYSWOW64 Vulkan DLLS/EXEs\r
-    echo "Calling UpdateVulkanSysFolder $winfolder\SYSWOW64 0" >>$log\r
+    Write-Host "Calling UpdateVulkanSysFolder $winfolder\SYSWOW64 0"\r
     UpdateVulkanSysFolder $winfolder\SYSWOW64 0\r
-\r
     if (!$?) {\r
-        echo "ERROR: Calling UpdateVulkanSysFolder for 64-bit OS" >>$log\r
+        Write-Error "Error: Calling UpdateVulkanSysFolder for 64-bit OS" \r
     }\r
 }\r
 \r
 # Update the SYSTEM32 Vulkan DLLS/EXEs\r
-echo "Calling UpdateVulkanSysFolder $winfolder\SYSTEM32 1" >>$log\r
+Write-Host "Calling UpdateVulkanSysFolder $winfolder\SYSTEM32 1"\r
 UpdateVulkanSysFolder $winfolder\SYSTEM32 1\r
-\r
 if (!$?) {\r
-    echo "ERROR: Calling UpdateVulkanSysFolder for all OS" >>$log\r
+    Write-Error "Error: Calling UpdateVulkanSysFolder for all OS"\r
 }\r
 \r
 # Create an array of vulkan sdk install dirs\r
 \r
-echo "Creating array of of Vulkan SDK Install dirs" >>$log\r
+Write-Host "Creating array of of Vulkan SDK Install dirs"\r
 $mrVulkanDllInstallDir=""\r
 $VulkanSdkDirs=@()\r
 Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall |\r
@@ -323,27 +364,29 @@ Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr
        if ($_ -match "\\VulkanSDK") {\r
            # Get the install path from UninstallString\r
            $tmp=Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$regkey -Name UninstallString\r
+           if (!$?) {\r
+               Write-Error "Error: Get-ItemProperty failed for Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$regkey"\r
+           }\r
            $tmp=$tmp -replace "\\Uninstall.exe.*",""\r
            $tmp=$tmp -replace ".*=.",""\r
-           echo "Adding $tmp to VulkanSDKDirs" >>$log\r
+           Write-Host "Adding $tmp to VulkanSDKDirs"\r
            $VulkanSdkDirs+=$tmp\r
            if ($regkey -eq $script:sdkname) {\r
                # Save away the sdk install dir for the the most recent vulkandll\r
-               echo "Setting mrVulkanDllInstallDir to $tmp" >>$log\r
+               Write-Host "Setting mrVulkanDllInstallDir to $tmp"\r
                $mrVulkanDllInstallDir=$tmp\r
            }\r
        }\r
    }\r
-\r
 if (!$?) {\r
-    echo "ERROR: Failed creating array of of Vulkan SDK Install dirs" >>$log\r
+    Write-Error "Error: Failed creating array of of Vulkan SDK Install dirs"\r
 }\r
 \r
 \r
 # Search list of sdk install dirs for an sdk compatible with $script:sdkname.\r
 # We go backwards through VulkanDllList to generate SDK names, because we want the most recent SDK.\r
 if ($mrVulkanDllInstallDir -eq "") {\r
-    echo "Searching VulkanDllList" >>$log\r
+    Write-Host "Searching VulkanDllList"\r
     ForEach ($idx in ($script:VulkanDllList.Length-1)..0) {\r
         $tmp=$script:VulkanDllList[$idx]\r
         $vulkanDllMajor=$script:VulkanDllList[$idx].Split('@')[1]\r
@@ -359,8 +402,13 @@ if ($mrVulkanDllInstallDir -eq "") {
         if ($vulkanDllPrebuildno) {\r
             $regEntry=$regEntry+"."+$vulkanDllPrebuildno\r
         }\r
-        echo "Comparing $regEntry" >>$log\r
+        Write-Host "Comparing $regEntry"\r
         $rval=Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$regEntry -ErrorAction SilentlyContinue\r
+        if (!$?) {\r
+            Write-Warning "Ignoring $regEntry because Get-ItemProperty failed to find corresponding SDK registry entry"\r
+            $Error.Clear();\r
+            continue\r
+        }\r
         $instDir=$rval\r
         $instDir=$instDir -replace "\\Uninstall.exe.*",""\r
         $instDir=$instDir -replace ".*=.",""\r
@@ -371,15 +419,14 @@ if ($mrVulkanDllInstallDir -eq "") {
             $reMinor=$rval.Split('.')[1]\r
             $rePatch=$rval.Split('.')[2]\r
             if ($reMajor+$reMinor+$rePatch -eq $vulkanDllMajor+$vulkanDllMinor+$vulkanDllPatch) {\r
-                echo "Setting mrVulkanDllInstallDir to $instDir" >>$log\r
+                Write-Host "Setting mrVulkanDllInstallDir to $instDir"\r
                 $mrVulkanDllInstallDir=$instDir\r
                 break\r
             }\r
         }\r
     }\r
-\r
     if (!$?) {\r
-        echo "ERROR: Failed searching VulkanDLLList" >>$log\r
+        Write-Error "Error: Failed searching VulkanDLLList"\r
     }\r
 }\r
 \r
@@ -398,20 +445,24 @@ $VulkanSdkDirs+="$windrive\VulkanSDK\0.9.3"
 # Note that we remove only those entries created by Vulkan SDKs. If other\r
 # layers were installed that are not from an SDK, we don't mess with them.\r
 \r
-echo "Removing old layer registry values from HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers" >>$log\r
+Write-Host "Removing old layer registry values from HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers"\r
 Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\ExplicitLayers | Select-Object -ExpandProperty Property |\r
    ForEach-Object {\r
        $regval=$_\r
        ForEach ($sdkdir in $VulkanSdkDirs) {\r
           if ($regval -like "$sdkdir\*.json") {\r
               Remove-ItemProperty -ErrorAction SilentlyContinue -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers -name $regval\r
-              echo "Removed registry value $regval" >>$log\r
+              if (!$?) {\r
+                 Write-Error "Error: Remove-ItemProperty failed for -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers -name $regval"\r
+              } else {\r
+                 Write-Host "Removed registry value $regval"\r
+              }\r
           }\r
        }\r
    }\r
 \r
 if (!$?) {\r
-    echo "ERROR: Failed Removing old layer registry values from HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers" >>$log\r
+    Write-Error "Error: Failed Removing old layer registry values from HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers"\r
 }\r
 \r
 # Remove 32-bit layer registry value if we're targeting a 64-bit OS\r
@@ -422,91 +473,103 @@ if ($ossize -eq 64) {
           ForEach ($sdkdir in $VulkanSdkDirs) {\r
              if ($regval -like "$sdkdir\*.json") {\r
                  Remove-ItemProperty -ErrorAction SilentlyContinue -Path HKLM:\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers -name $regval\r
-                 echo "Removed WOW6432Node registry value $regval" >>$log\r
+                 if (!$?) {\r
+                    Write-Error "Error: Remove-ItemProperty failed for -Path HKLM:\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers -name $regval"\r
+                 } else {\r
+                    Write-Host "Removed WOW6432Node registry value $regval"\r
+                 }\r
              }\r
           }\r
       }\r
 \r
     if (!$?) {\r
-        echo "ERROR: Failed Removing old layer registry values from HKLM\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers" >>$log\r
+        Write-Error "Error: Failed Removing old layer registry values from HKLM\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers"\r
     }\r
 }\r
 \r
 \r
 # Create layer registry values associated with Vulkan SDK from which $mrVulkanDll is from\r
 \r
-echo "Creating new layer registry values" >>$log\r
+Write-Host "Creating new layer registry values"\r
 if ($mrVulkanDllInstallDir -ne "") {\r
 \r
     # Create registry keys if they don't exist\r
     if (-not (Test-Path -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers)) {\r
-        echo "Creating new registry key HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers" >>$log\r
+        Write-Host "Creating new registry key HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers"\r
         New-Item -Force -ErrorAction SilentlyContinue -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers | out-null\r
-\r
         if (!$?) {\r
-            echo "ERROR: Failed creating HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers" >>$log\r
+            Write-Error "Error: Failed creating HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers"\r
         }\r
     }\r
     if ($ossize -eq 64) {\r
         if (-not (Test-Path -Path HKLM:\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers)) {\r
-            echo "Creating new registry key HKLM\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers" >>$log\r
+            Write-Host "Creating new registry key HKLM\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers"\r
             New-Item -Force -ErrorAction SilentlyContinue -Path HKLM:\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers | out-null\r
-\r
             if (!$?) {\r
-                echo "ERROR: Failed creating HKLM\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers" >>$log\r
+                Write-Error "Error: Failed creating HKLM\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers"\r
             }\r
         }\r
     }\r
 \r
 \r
     if ($ossize -eq 64) {\r
-    \r
         # Create registry values in normal registry location for 64-bit items on a 64-bit OS\r
         Get-ChildItem $mrVulkanDllInstallDir\Bin -Filter VkLayer*json |\r
            ForEach-Object {\r
-               echo "Creating registry value $mrVulkanDllInstallDir\Bin\$_" >>$log\r
+               Write-Host "Creating registry value $mrVulkanDllInstallDir\Bin\$_"\r
                New-ItemProperty -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers -Name $mrVulkanDllInstallDir\Bin\$_ -PropertyType DWord -Value 0 | out-null\r
-\r
                if (!$?) {\r
-                   echo "ERROR: Failed creating $mrVulkanDllInstallDir\Bin\$_" >>$log\r
+                   Write-Error "Error: Failed creating $mrVulkanDllInstallDir\Bin\$_"\r
                }\r
            }\r
+           if (!$?) {\r
+               Write-Error "Error: Failed Get-ChildItem $mrVulkanDllInstallDir\Bin | ForEach-Object "\r
+           }\r
 \r
         # Create registry values for the WOW6432Node registry location for 32-bit items on a 64-bit OS\r
         Get-ChildItem $mrVulkanDllInstallDir\Bin32 -Filter VkLayer*json |\r
            ForEach-Object {\r
-               echo "Creating WOW6432Node registry value $mrVulkanDllInstallDir\Bin32\$_" >>$log\r
+               Write-Host "Creating WOW6432Node registry value $mrVulkanDllInstallDir\Bin32\$_"\r
                New-ItemProperty -Path HKLM:\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers -Name $mrVulkanDllInstallDir\Bin32\$_ -PropertyType DWord -Value 0 | out-null\r
-\r
                if (!$?) {\r
-                   echo "ERROR: Failed creating $mrVulkanDllInstallDir\Bin32\$_" >>$log\r
+                   Write-Error "Error: Failed creating $mrVulkanDllInstallDir\Bin32\$_"\r
                }\r
            }\r
-           \r
+           if (!$?) {\r
+               Write-Error "Error: Failed Get-ChildItem $mrVulkanDllInstallDir\Bin32 | ForEach-Object "\r
+           }\r
     } else {\r
-    \r
         # Create registry values in normal registry location for 32-bit items on a 32-bit OS\r
         Get-ChildItem $mrVulkanDllInstallDir\Bin32 -Filter VkLayer*json |\r
            ForEach-Object {\r
-               echo "Creating registry value $mrVulkanDllInstallDir\Bin\$_" >>$log\r
+               Write-Host "Creating registry value $mrVulkanDllInstallDir\Bin\$_"\r
                New-ItemProperty -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers -Name $mrVulkanDllInstallDir\Bin32\$_ -PropertyType DWord -Value 0 | out-null\r
-\r
                if (!$?) {\r
-                   echo "ERROR: Failed creating $mrVulkanDllInstallDir\Bin\$_" >>$log\r
+                   Write-Error "Error: Failed creating $mrVulkanDllInstallDir\Bin\$_"\r
                }\r
             }\r
-    \r
+            if (!$?) {\r
+                Write-Error "Error: Failed Get-ChildItem $mrVulkanDllInstallDir\Bin32 | ForEach-Object "\r
+            }\r
     }\r
 }\r
 \r
 # Final log output\r
-echo "ConfigLayersAndVulkanDLL.ps1 completed" >>$log\r
-(Get-Date).ToString() >>$log\r
+Write-Host "ConfigLayersAndVulkanDLL.ps1 completed"\r
+$endTime=Get-Date\r
+Write-Host "End time: $endTime"\r
+\r
+Stop-Transcript\r
 \r
 # Convert logfile to ascii\r
-cat $log | out-File -encoding ascii -filepath $logascii\r
-remove-item $log\r
+Get-Content $log | Out-File -encoding ascii -filepath $logascii\r
+\r
+# Temp to be used for debugging failure to install issue (as VulkanRT folder might get removed)\r
+Get-Content $log | Out-File -encoding ascii -filepath $logascii2\r
+\r
 \r
+# Remove the unicode log as we no longer need it.\r
+Remove-Item $log\r
 \r
 \r
 # SIG # Begin signature block\r