Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell-运行前检查脚本的更新_Powershell_Powershell 3.0 - Fatal编程技术网

Powershell-运行前检查脚本的更新

Powershell-运行前检查脚本的更新,powershell,powershell-3.0,Powershell,Powershell 3.0,我想知道是否有人知道在运行powershell脚本之前检查其自身更新的方法 我有一个脚本,我将被分派到多台计算机上,我不想在每次更改脚本时都将其重新部署到每台计算机上。我想让它检查一个特定的位置,看看是否有一个更新版本的自身(并更新自己,如果需要) 我似乎想不出一个办法来做这件事。如果有人能帮忙,请告诉我。谢谢。好吧,创建一个运行实际脚本的简单批处理文件的一种方法,该批处理文件的第一行可能是检查更新文件夹中是否存在ps1。如果有,它可以先将其复制下来,然后启动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"

这是我组合的一个函数。将可能包含较新版本的文件的路径传递给它。这将更新自身,然后使用传递给原始脚本的任何参数重新运行。在过程的早期执行此操作,其他功能结果将丢失。我通常会检查网络是否正常,并且我可以看到保存较新文件的共享,然后运行以下操作:

函数更新自己
{
[CmdletBinding()]
param
(
[参数(必需=$true,
位置=0)]
[字符串]$SourcePath
)
#检查我们要比较的文件是否存在
if(测试路径$SourcePath)
{
#此脚本的路径
$CurrentScript=$MyInvocation.ScriptName
if(!($SourcePath-eq$CurrentScript))
{
if($(获取项$SourcePath).LastWriteTimeUtc-gt$(获取项$CurrentScript).LastWriteTimeUtc)
{
写主机“更新…”
复制项$SourcePath$CurrentScript
#如果脚本已更新,请使用原始参数运行它
&$CurrentScript$script:args
出口
}
}
}
写入主机“无需更新”
}

更新我自己“\\path\to\latest\release\of\file.ps1”
非常好的建议,我感谢您的帮助。您知道有什么方法可以在线检查(在特定的url中,例如“www.testserver.com/updates/powershellprogram.ps1”),如果更新文件存在,请将其下载到目录中?或者它只能通过本地网络资源使用?如果是这样,我可能会使用Powershell而不是batch,这对本地和网络文件检查很好,但不太适合在internet上检查文件的存在,“除非”您将使用windows的“wget”等帮助工具。你可能想看看这里