【发布时间】:2017-01-09 15:50:34
【问题描述】:
第一次stackoverflower。
我需要从我的软件部署 GPO 的 PackageRegistrations 中删除“幽灵”条目。
我的意思是,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 批量更新它们 - 我们正在从固定文件迁移到 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}
}
【问题讨论】:
标签: active-directory windows-installer group-policy