前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows Sysinternals 工具自动更新脚本

Windows Sysinternals 工具自动更新脚本

作者头像
我与梦想有个约会
发布2023-10-21 14:32:41
1400
发布2023-10-21 14:32:41
举报
文章被收录于专栏:jiajia_deng

Windows Sysinternals 内包含了很多微软提供的实用工具,经常用到的比如 Process ExplorerProcess MonitorTcpViewAutorunsDbgView 等等,因为这些工具各司其职,大多是分开的单独的 exe,如果想更新他们,我自己平时都是去 Windows Sysinternals 直接下载覆盖更新,每个文件都去看看版本号对不对,这样很麻烦。后面在网络上搜索到了一个 PowerShell 的脚本,直接运行脚本指定好目录就可以自动下载最新的工具了,非常实用,这里推荐给大家。

运行后的效果

2016-06-06_142518
2016-06-06_142518

PowerShell 代码

代码语言:javascript
复制
function Update-SysinternalsHTTP ($ToolsLocalDir = "c:\temp\sys")  
{ 
    if (Test-Path $ToolsLocalDir){ 
        cd $ToolsLocalDir
        $DebugPreference = "SilentlyContinue"
        $wc = new-object System.Net.WebClient
        $userAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2;)"
        $wc.Headers.Add("user-agent", $userAgent)
        $ToolsUrl = "http://live.sysinternals.com/tools"
        $toolsBlock="<pre>.*</pre>"
        $WebPageCulture = New-Object System.Globalization.CultureInfo("en-us")
        $Tools = @{}
        $ToolsPage = $wc.DownloadString($ToolsUrl)
        $matches=[string] $ToolsPage select-string -pattern  "$ToolsBlock" -AllMatches
        foreach($match in $matches.Matches) {   
            $txt = ( ($match.Value  -replace "</A><br>", "`r`n") -replace  "<[^>]*?>","")
            foreach($lines in $txt.Split("`r`n")){
                $line=$linesselect-string  -NotMatch -Pattern "To Parent^$&lt;dir&gt;"
                if ($line -ne $null){
                    $date=(([string]$line).substring(0,38)).trimstart(" ") -replace "  "," "
                    $file=([string]$line).substring(52,(([string]$line).length-52))
                    $Tools["$file"]= [datetime]::ParseExact($date,"f",$WebPageCulture)
                }
            }
        }
        $Tools.keys
        ForEach-Object {
            $NeedUpdate=$false
            if (Test-Path $_)
            {
                $SubtractSeconds = New-Object System.TimeSpan 0, 0, 0, ((dir $_).lastWriteTime).second, 0
                $LocalFileDate= ( (dir $_).lastWriteTime ).Subtract( $SubtractSeconds )
                $needupdate=(($tools[$_]).touniversaltime() -lt $LocalFileDate.touniversaltime())
            } else {$NeedUpdate=$true}
            if ( $NeedUpdate ) 
            {
                Try {
                        $wc.DownloadFile("$ToolsUrl/$_","$ToolsLocalDir\$_" )
                        $f=dir "$ToolsLocalDir\$_"
                        $f.lastWriteTime=($tools[$_])
                        "Updated $_"
                    }
                catch { Write-debug "发生错误: $_" }
            } 
        } 
    }
}
cls
"更新开始..."
Update-Sysinternalshttp -ToolsLocalDir "D:\Tools"
"更新结束"

将脚本复制下来保存为 .ps1 后缀的文件,使用 PowerShell 运行即可。注意代码最后的路径 D:\Tools 如果你需要修改为其他路径请在这里修改。代码实际就是去 http://live.sysinternals.com/tools 对比文件信息进行更新。有兴趣的可以自己做个脚本来搞定!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 运行后的效果
  • PowerShell 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档