【问题标题】:Apply service packs (.msu file) update using powershell scripts on local server使用本地服务器上的 powershell 脚本应用服务包(.msu 文件)更新
【发布时间】:2014-02-02 10:27:32
【问题描述】:

它的基本作用是脚本从某个位置获取 .msu 文件并复制到“C:\temp\”文件夹。 然后脚本获取所有 .msu 文件并将名称存储在数组中。 它使用 foreach 循环尝试将 .msu 更新应用到运行脚本的本地服务器。

但是当我运行脚本时。它什么也没做。

下面是代码

$from="sourceLocation\*.msu"
$to="C:\temp\"
Copy-Item $from $to -Recurse -Force
$listOfMSUs= (Get-ChildItem –Path $to -Filter "*.msu").Name
Write-Host $listOfMSUs

if($listOfMSUs)
{
    foreach($msu in $listOfMSUs)
    {
    Write-Host "Processing The Update"
    &  wusa $to$msu /quiet /norestart         
    }
}
else{

Write-Host "MSUs doesnt exists"
}

有什么建议吗?

【问题讨论】:

    标签: .net powershell deployment powershell-2.0 powershell-3.0


    【解决方案1】:

    您将文件复制到 本地 文件夹 (C:\temp),但在 远程 主机上运行 wusa。该主机可能具有相同的本地文件夹,但您没有将更新复制到该文件夹​​。如果要从远程主机上的本地文件夹安装更新,则必须将它们复制到远程主机上的该文件夹:

    Copy-Item $from "\\$hostname\$($to -replace ':','$')" -Recurse -Force
    

    编辑:由于您想在运行脚本的主机上安装更新,因此您的代码应该可以正常工作,尽管我会对其进行一些简化,例如像这样:

    $from = "sourceLocation\*.msu"
    $to   = 'C:\temp'
    
    Copy-Item $from $to -Recurse -Force
    
    $updates = @(Get-ChildItem –Path $to -Filter '*.msu')
    if ($updates.Count -ge 1) {
      $updates | % {
        Write-Host "Processing update $($_.Name)."
        & wusa $_.FullName /quiet /norestart
      }
    } else {
      Write-Host 'No updates found.'
    }
    

    主机上是否启用了 UAC?在这种情况下,您需要在手动运行脚本时“以管理员身份”运行脚本,或者在将脚本作为计划任务运行时选中“以最高权限运行”选项。

    【讨论】:

    • 嗨安斯加尔。老实说,我不确定我的问题是否正确。在这种情况下,服务器是我的本地服务器,文件被复制到该本地文件夹中。
    • @Sike12 是否要在运行脚本的主机上安装更新?还是要将它们安装在远程主机上?
    • 是的 Ansgar 我想在运行脚本的主机上运行它们。我试过这个命令,但它什么也没做。 wusa "C:\Temp\Windows6.1-KB2506143-x64.msu" /quiet /norestart 。但是我已经更新了问题
    • @Sike12 查看更新的答案。您的服务器上是否启用了 UAC,如果启用,您是否以提升的权限运行脚本? “什么都不做”到底是什么意思?是不是复制文件失败?它是否无法安装它们?您是否收到错误消息或任何其他类型的响应?
    • 嗨 Ansgar 这是我在事件查看器中遇到的错误。由于错误 2147942487“参数不正确”,无法安装 Windows 更新。 (命令行:“"C:\WINDOWS\system32\wusa.exe" /install C:\temp\Windows6.1-KB2506143-x64.msu /norestart")
    【解决方案2】:

    答案很简单。我只需要一个 /install 命令参数。 所以该行应该是

     & wusa /install $to$msu  /quiet /norestart 
    
     OR
    
      & wusa $to$msu  /quiet /norestart 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 2016-03-02
      相关资源
      最近更新 更多