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