実行前に PowerShell スクリプト自体の更新をチェックする方法を誰かが知っているかどうか疑問に思っていました。
複数のコンピューターに送信するスクリプトがあり、スクリプトに変更が加えられるたびに各コンピューターに再展開する必要はありません。特定の場所をチェックして、それ自体の新しいバージョンがあるかどうかを確認したいと思います(必要に応じて更新します)。
なかなか方法が思い浮かびません。誰かが助けてくれるかどうか教えてください。ありがとう。
実行前に PowerShell スクリプト自体の更新をチェックする方法を誰かが知っているかどうか疑問に思っていました。
複数のコンピューターに送信するスクリプトがあり、スクリプトに変更が加えられるたびに各コンピューターに再展開する必要はありません。特定の場所をチェックして、それ自体の新しいバージョンがあるかどうかを確認したいと思います(必要に応じて更新します)。
なかなか方法が思い浮かびません。誰かが助けてくれるかどうか教えてください。ありがとう。
ここに私がまとめた機能があります。新しいリリースを保持している可能性のあるファイルのパスを渡します。これはそれ自体を更新し、元のスクリプトに渡された引数を使用して再実行します。プロセスの早い段階でこれを行うと、他の関数の結果が失われます。私は通常、ネットワークが稼働していることを確認し、新しいファイルを保持している共有を確認してから、これを実行します。
function Update-Myself
{
[CmdletBinding()]
param
(
[Parameter(Mandatory = $true,
Position = 0)]
[string]$SourcePath
)
#Check that the file we're comparing against exists
if (Test-Path $SourcePath)
{
#The path of THIS script
$CurrentScript = $MyInvocation.ScriptName
if (!($SourcePath -eq $CurrentScript ))
{
if ($(Get-Item $SourcePath).LastWriteTimeUtc -gt $(Get-Item $CurrentScript ).LastWriteTimeUtc)
{
write-host "Updating..."
Copy-Item $SourcePath $CurrentScript
#If the script was updated, run it with orginal parameters
&$CurrentScript $script:args
exit
}
}
}
write-host "No update required"
}
Update-Myself "\\path\to\newest\release\of\file.ps1"