2016-08-24 114 views
0

我有一個版本檢查功能,在我的腳本開始應該檢查文件共享上的.exe版本,並將其與用戶桌面上的.exe進行比較。如果版本不同,它將刪除當前的桌面.exe並將其替換爲文件共享上的.exe。但是,從.exe運行時它不會取代它,但是當它從PowerShell Studio或ISE運行時它將工作。我正在使用PowerShell Studio將其編譯到.exe中。這裏是我的代碼:PowerShell - 刪除項目和複製項目

function global:VersionCheck 
{ 
    # Get filepath of updated program 
    $updatedprogram = (Get-Item \\fileshare\example\DeviceHealth\DeviceHealthV2.exe).VersionInfo | select -ExpandProperty FileVersion 
    # Get version of current script on device 
    $outdateprogram = (Get-Item c:\Users\$env:USERNAME\desktop\DeviceHealthV2.exe).VersionInfo | select -ExpandProperty FileVersion 

    if ($updatedprogram -ne $outdateprogram) 
    { 
     [System.Windows.Forms.MessageBox]::Show("Program will be updated", "Out of Date") 
     Start-Sleep -Seconds 2 
     Remove-Item -Path "c:\Users\$env:USERNAME\desktop\DeviceHealthV2.exe" -Force 
     Start-Sleep -Seconds 2 
     Copy-Item -Path "\\fileshare\example\DeviceHealth\DeviceHealthV2.exe" -Destination "c:\Users\$env:USERNAME\desktop" -Force 
    } 
    else { } 
} 

VersionCheck 

任何人都可以幫我確定爲什麼它不工作時,我作爲一個.exe運行它?謝謝。

+0

如何運行可執行文件?由用戶還是服務?無論任何運行有權訪問該共享? – Matt

+0

它由用戶從桌面以管理員身份運行。它可以訪問該共享,因爲它可以訪問其他內容。 –

+0

是否正在替換正在運行的相同可執行文件?用戶是否啓動DeviceHealthV2.exe,並試圖使其刪除/替換自己? – TheMadTechnician

回答

0

我發現了我明顯的解決方案。我剛剛創建了一個單獨的腳本的更新和改變了我的腳本:

function global:VersionCheck 
{ 
    # Get filepath of updated program 
    $updatedprogram = (Get-Item \\fileshare\test\DeviceHealth\DeviceHealthV2.exe).VersionInfo | select -ExpandProperty FileVersion 
    # Get version of current script on device 
    $outdateprogram = (Get-Item c:\Users\$env:USERNAME\desktop\DeviceHealthV2.exe).VersionInfo | select -ExpandProperty FileVersion 

    if ($updatedprogram -ne $outdateprogram) 
    { 
     [System.Windows.Forms.MessageBox]::Show("Program will be updated", "Out of Date") 
     Start-Process "\\fileshare\test\scripts\Martin\PMCS\DeviceHealthUpdate.exe" -WindowStyle Hidden 
    } 
    else { } 
} 

VersionCheck 

而且在更新腳本我把:

Get-Process DeviceHealthV2 | Foreach-Object { $_.CloseMainWindow() | Out-Null } | stop-process –force 
Remove-Item -Path "c:\Users\$env:USERNAME\desktop\DeviceHealthV2.exe" -Force 
Start-Sleep -Seconds 1 
Copy-Item -Path "\\fileshare\ask\DeviceHealth\DeviceHealthV2.exe" -Destination "c:\Users\$env:USERNAME\desktop" -Force 
Start-Sleep -Seconds 1 
Start-Process "\\fileshare\ask\DeviceHealth\DeviceHealthV2.exe" 
Start-Sleep -Seconds 1 
[System.Windows.Forms.MessageBox]::Show("Update Successful", "Complete") 

我測試了它和它的偉大工程。感謝大家的建議!