From 21be9838553188e884c86863a46487977e8f9883 Mon Sep 17 00:00:00 2001 From: DanHam Date: Thu, 26 Jan 2017 00:03:24 +0000 Subject: [PATCH 1/2] provisioner/powershell: Use system context env var to set output file path Fixes #4271 --- provisioner/powershell/elevated.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/provisioner/powershell/elevated.go b/provisioner/powershell/elevated.go index 80bdc005a..9c70cdb27 100644 --- a/provisioner/powershell/elevated.go +++ b/provisioner/powershell/elevated.go @@ -14,7 +14,7 @@ type elevatedOptions struct { var elevatedTemplate = template.Must(template.New("ElevatedCommand").Parse(` $name = "{{.TaskName}}" -$log = "$env:TEMP\$name.out" +$log = "$env:SystemRoot\Temp\$name.out" $s = New-Object -ComObject "Schedule.Service" $s.Connect() $t = $s.NewTask($null) @@ -53,7 +53,7 @@ $t.XmlText = @' cmd - /c powershell.exe -EncodedCommand {{.EncodedCommand}} > %TEMP%\{{.TaskName}}.out 2>&1 + /c powershell.exe -EncodedCommand {{.EncodedCommand}} > %SYSTEMROOT%\Temp\{{.TaskName}}.out 2>&1 @@ -81,5 +81,12 @@ do { } } while (!($t.state -eq 3)) $result = $t.LastTaskResult +if (Test-Path $log) { + try { + Takeown /F $log | Out-Null + Icacls $log /Grant:r Administrators:F /c /q 2>&1 | Out-Null + Remove-Item $log -Force -ErrorAction SilentlyContinue | Out-Null + } catch { $Global:Error.RemoveAt(0) } +} [System.Runtime.Interopservices.Marshal]::ReleaseComObject($s) | Out-Null exit $result`)) From 370b67497e90785b71be1b6fcc6430de487d644e Mon Sep 17 00:00:00 2001 From: DanHam Date: Thu, 26 Jan 2017 11:21:45 +0000 Subject: [PATCH 2/2] provisioner/powershell: Don't over complicate removal of tmp output file --- provisioner/powershell/elevated.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/provisioner/powershell/elevated.go b/provisioner/powershell/elevated.go index 9c70cdb27..d2c23f757 100644 --- a/provisioner/powershell/elevated.go +++ b/provisioner/powershell/elevated.go @@ -82,11 +82,7 @@ do { } while (!($t.state -eq 3)) $result = $t.LastTaskResult if (Test-Path $log) { - try { - Takeown /F $log | Out-Null - Icacls $log /Grant:r Administrators:F /c /q 2>&1 | Out-Null Remove-Item $log -Force -ErrorAction SilentlyContinue | Out-Null - } catch { $Global:Error.RemoveAt(0) } } [System.Runtime.Interopservices.Marshal]::ReleaseComObject($s) | Out-Null exit $result`))