我想知道是否有人知道在运行之前让PowerShell脚本检查自身更新的方法。
我有一个脚本,我将调度到多台计算机,并且不希望每次更改脚本时都必须将其重新部署到每台计算机。我想让它检查某个位置,看看是否有更新版本的自身(并在需要时自行更新)。
我似乎无法想办法。如果有人可以提供帮助,请告诉我。感谢。
答案 0 :(得分:3)
好吧,有一种方法可能是创建一个运行实际脚本的简单批处理文件,该批处理文件中的第一行可能是检查更新文件夹中是否存在ps1。如果有,可以先将其复制,然后启动PowerShell脚本
EG。每当有更新时,您都会将“Mypowershellscript.ps1”脚本放在c:\temp\update\ folder
让我们假设您的脚本将从
运行c:\temp\myscriptfolder\
然后您可以像这样创建批处理文件
if NOT exist C:\temp\update\mypowershelscript.ps1 goto :end
copy /Y c:\temp\update\MyPowerShellScript.ps1 c:\temp\MyScriptFolder\
:END
%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe -nologo -noprofile -file "c:\temp\myscriptfolder\mypowershellscript.ps1"
答案 1 :(得分:0)
这是我放在一起的功能。将它传递给可能包含较新版本的文件的路径。这将更新自身,然后使用传递给原始脚本的任何参数重新运行。在此过程的早期执行此操作,其他功能结果将丢失。我通常检查网络是否已启动,我可以看到持有新文件的共享,然后运行:
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"