.net - 使用本地服务器上的 powershell 脚本应用服务包(.msu 文件)更新

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

它的基本作用是脚本从某个位置获取 .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"
}

请问有什么建议吗?

最佳答案

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

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?在这种情况下,您需要在手动运行脚本时“以管理员身份”运行脚本,或者在将脚本作为计划任务运行时选中“以最高权限运行”选项。

关于.net - 使用本地服务器上的 powershell 脚本应用服务包(.msu 文件)更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21112244/

相关文章:

sql-server - 从 RedGate checkin 脚本重新创建数据库

powershell - azure 克隆错误解决方法

maven-2 - 部署 war 时出错(TomCat)

c# - 如何检测AxAcroPdf组件是否加载了PDF?

c# - List Clear() 方法是否会破坏子级 [C#.NET]?

c# - 无论实际响应如何,Polly 重试策略结果始终成功

django - 如何在 Django 设置中访问 Heroku 配置变量

c# - 通用类型与扩展方法

powershell - 如何从树中删除所有隐藏的不需要的目录?

java - 如何改进我们的构建和部署过程?