1

我想知道是否有人知道在运行之前让 powershell 脚本检查自身更新的方法。

我有一个脚本,我将要分派到多台计算机,并且不希望每次更改脚本时都必须将其重新部署到每台计算机。我想让它检查某个位置以查看是否有更新版本的自身(并在需要时更新自身)。

我似乎想不出办法。请让我知道是否有人可以提供帮助。谢谢。

4

2 回答 2

3

好吧,一种方法可能是创建一个简单的批处理文件来运行您的实际脚本,并且该批处理文件中的第一行可能是检查更新文件夹中是否存在 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"
于 2013-04-03T20:53:05.943 回答
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"

于 2017-12-30T15:30:04.333 回答