第一次stackoverflower。
我需要从我的软件部署GPO的PackageRegistrations中删除'ghost'条目。
我的意思是ADSI对象中的条目多于与GPO关联的MSI / MST文件。也就是说这个博主似乎也在体验http://justanotheritblog.co.uk/2016/11/15/list-msi-paths-from-software-installation-policies/(我在查看我的问题时才发现这一点)。
当我在ADSI中找到合适的地方时,我会在'msiScriptName'上发生错误,它似乎有'A'或'R'的值。
我似乎无法找到的是关于这些值可能代表什么的任何信息。
关于“A”和“R”的含义以及/或如何正确识别和/或删除“幽灵”条目的任何想法都会大受欢迎。
原因是我有一大堆需要更新文件路径的软件部署GPO,而不是手动编辑每个我想用PowerShell批量更新它们的GPO - 我们从固定文件转移到DFS服务器,所以我需要更新msiFileList属性。我可以这样做,但不想浪费不相关对象的处理开销。
以下是粗略的代码,建议我如何做到这一点
$MSIFiles = @()
# Get all the SoftwareDeployment GPOs, indicated by a displayname continaing 'Install' and create an object for each MSI/MST associated to it.
$Packages = Get-GPO -All | Where-Object { $_.DisplayName -like "*Install*" } | Get-ADObjectGPOPackages -Domain 'skyriver.internal'
foreach ($p in $Packages)
{
$msiCount = ($p.msiFileList | Measure-Object).Count
$msiFileListNew = @()
for ($i = 0; $i -lt $msiCount; $i ++)
{
$msiFile = $p.msiFileList[$i] -replace 'hoth(01|01.skyriver.internal|02.skyriver.internal)','skyriver.internal\data'
$msiFileListNew += $msiFile
}
$Properties = [ordered]@{
'gpoDisplayName' = $p.gpoDisplayName
'PackageNumber' = $p.PackageNumber
'DisplayName' = $p.DisplayName
'CN' = $p.CN
'DistinguishedName' = $p.DistinguishedName
'Identity' = $p.Identity
'msiFileList' = $msiFileListNew
}
$obj = New-Object -TypeName psobject -Property $Properties
$MSIFiles += $obj
}
# Now make the replacements.
foreach ($m in $MSIFiles)
{
Set-ADObject -Identity $m.Identity -Server dagobah.skyriver.internal -Replace @{msiFileList = $m.msiFileList}
}
答案 0 :(得分:1)
据我所知,A是广告(即可安装),R是删除。 Ghost包可能有一个R,因为它们不再有效,因此要卸载(我不确定这是否仅适用于在删除之前启用“当它超出范围时卸载”选项?)。