1. #单引号是转义字符
    2. #创建空数组array=@() ,数组内逗号分隔
    3. #msu文件下载到地址 >> C:\Downloads\patch\
    4. #cab文件解压到地址 >> C:\Downloads\cab_file\
    5. #定义msu下载目录
    6. $dir_msu = "C:\Downloads\patch\"
    7. #定义cab文件目录
    8. $dir_cab = "C:\Downloads\cab_file\"
    9. #定义下载列表
    10. $downloads_list = "https://download.microsoft.com/download/1/F/2/1F231326-A6E5-4B48-9A68-22C603BA05AD/Windows8.1-KB2992611-x64.msu",
    11. "https://download.microsoft.com/download/5/5/8/55892964-C10D-41F3-B301-4638E7FD86AF/Windows8.1-KB2977292-x64.msu"
    12. #下载所需软件包
    13. function downloads{
    14. #先进入$file_msu位置
    15. if (Test-Path $dir_msu){
    16. echo ""
    17. echo "---------- 0. 文件夹已存在,无需创建! ----------"
    18. cd $dir_msu
    19. }
    20. else{
    21. echo ""
    22. echo "---------- 0. 文件夹不存在,正在创建! ----------"
    23. mkdir $dir_msu
    24. cd $dir_msu
    25. }
    26. if(Test-Path $dir_cab){
    27. echo ""
    28. echo "---------- 0. 文件夹已存在,无需创建! ----------"
    29. }
    30. else{
    31. echo ""
    32. echo "---------- 0. 文件夹不存在,正在创建! ----------"
    33. mkdir $dir_cab
    34. }
    35. #定义msu文件位置以及是所有文件msu文件
    36. $file_msu = Get-ChildItem C:\Downloads\patch\ *kb* -name
    37. #定义cab文件位置以及是所有文件cab文件
    38. $file_cab = Get-ChildItem C:\Downloads\cab_file\ *kb*.cab -name
    39. echo ""
    40. echo "---------- 1. 已切换到下载目录,准备下载! ----------"
    41. $a = 0
    42. foreach ($http_web in $downloads_list){
    43. echo $count
    44. $url = $downloads_list[$a].Split('/') -like "*.msu"
    45. wget -Uri $http_web -outfile "$url" | Out-Null
    46. echo ">>下载完成:$url"
    47. $a++
    48. }
    49. Start-Sleep 20
    50. }
    51. #使用wusa解压cab
    52. function msu{
    53. #定义msu下载目录
    54. $dir_msu = "C:\Downloads\patch\"
    55. #定义cab文件目录
    56. $dir_cab = "C:\Downloads\cab_file\"
    57. #定义msu文件位置以及是所有文件msu文件
    58. $file_msu = Get-ChildItem C:\Downloads\patch\ *kb* -name
    59. #定义cab文件位置以及是所有文件cab文件
    60. $file_cab = Get-ChildItem C:\Downloads\cab_file\ *kb*.cab -name
    61. #将msu文件加入数组
    62. $array_msu = @($file_msu)
    63. echo ""
    64. echo "---------- 2. 即将解压的msu文件如下: ----------"
    65. echo $array_msu
    66. foreach ($msu in $array_msu)
    67. {
    68. #循环解压所有文件,并通过out-null等待程序
    69. Start-Process -FilePath wusa -ArgumentList C:\Downloads\patch\$msu,/extract:"C:\Downloads\cab_file\" -Wait
    70. }
    71. echo ""
    72. echo "---------- 3. 文件解压完成!----------"
    73. }
    74. function cab{
    75. #定义msu下载目录
    76. $dir_msu = "C:\Downloads\patch\"
    77. #定义cab文件目录
    78. $dir_cab = "C:\Downloads\cab_file\"
    79. #定义msu文件位置以及是所有文件msu文件
    80. $file_msu = Get-ChildItem C:\Downloads\patch\ *kb* -name
    81. #定义cab文件位置以及是所有文件cab文件
    82. $file_cab = Get-ChildItem C:\Downloads\cab_file\ *kb*.cab -name
    83. #将cab文件加入数组
    84. $array_cab = @($file_cab)
    85. echo ""
    86. echo "---------- 4. 即将安装的补丁文件如下: ----------"
    87. echo $array_cab
    88. foreach ($cab in $array_cab)
    89. {
    90. Start-Process -FilePath dism -ArgumentList /online,/add-package,/packagepath:"C:\Downloads\cab_file\$cab",/norestart -wait
    91. echo ""
    92. echo ">> 补丁[ $cab ]已更新完成!"
    93. }
    94. echo ""
    95. echo "---------- 5. 所有补丁已经更新完成,请重启服务完成更新操作! ----------"
    96. }
    97. downloads
    98. #Start-Sleep 20
    99. msu
    100. #Start-Sleep 20
    101. cab
    102. #Start-Sleep 20
    103. if($?)
    104. {
    105. echo ""
    106. echo "---------- 6. 系统已更新补丁如下: ----------"
    107. hotfix
    108. }
    109. else
    110. {
    111. echo ""
    112. echo "---------- 6.补丁安装失败,请检查脚本! ----------"
    113. }