我想知道是否有人知道在运行之前让 powershell 脚本检查自身更新的方法。
我有一个脚本,我将要分派到多台计算机,并且不希望每次更改脚本时都必须将其重新部署到每台计算机。我想让它检查某个位置以查看是否有更新版本的自身(并在需要时更新自身)。
我似乎想不出办法。请让我知道是否有人可以提供帮助。谢谢。
我想知道是否有人知道在运行之前让 powershell 脚本检查自身更新的方法。
我有一个脚本,我将要分派到多台计算机,并且不希望每次更改脚本时都必须将其重新部署到每台计算机。我想让它检查某个位置以查看是否有更新版本的自身(并在需要时更新自身)。
我似乎想不出办法。请让我知道是否有人可以提供帮助。谢谢。
好吧,一种方法可能是创建一个简单的批处理文件来运行您的实际脚本,并且该批处理文件中的第一行可能是检查更新文件夹中是否存在 ps1。有的话可以先复制下来,然后启动你的powershell脚本
例如。每当有更新时,您将“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"
这是我放在一起的一个函数。将可能包含较新版本的文件的路径传递给它。这将自我更新,然后使用传递给原始脚本的任何参数重新运行。在过程的早期执行此操作,其他功能结果将丢失。我通常会检查网络是否已启动,并且可以看到包含较新文件的共享,然后运行以下命令:
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"