0
私は、ファイル共有上の.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としてそれを実行するときに動作しない理由を誰かが私を助けることができますか?ありがとう。
実行ファイルはどのように実行されていますか?ユーザーまたはサービスによって?実行しているすべてのものが共有にアクセスできますか? – Matt
ユーザーによってデスクトップから管理者として実行されています。そこにある他のものにアクセスするので、共有にアクセスできます。 –
実行中の同じ実行可能ファイルを置換するアイテムはありますか?ユーザーがDeviceHealthV2.exeを起動していて、それを削除/置き換えしようとしていますか? – TheMadTechnician