尝试链接GPO时,PowerShell错误方法调用失败,因为[System.Object[]]不包含名为“op_Subtraction”的方法

oknrviil  于 2023-02-19  发布在  Shell
关注(0)|答案(2)|浏览(201)

编辑问题和代码---我遇到了瓶颈,正在向Maven寻求帮助。我正在编写一个脚本,该脚本将一个GPO链接到多个OU,并将其放置在每个OU中目标GPO的链接顺序上(或根据情况加1)例如要链接的GPO是GPO 1并且它需要链接到OU 1并且链接顺序需要基于GPO 2的链接顺序,因此如果GPO 2是链接顺序9,它会将GPO 1置于位置9,将GPO 2下移至位置10。这需要发生在所有子OU上,并且需要基于每个OU中GPO 2的位置,因为每个OU中的位置都不同。
我根据TheMadTechnicians的建议编辑了代码,它清除了错误,但它又出现了另一个问题。
它根据GPO 2的链接顺序将GPO 1放置在第一个OU中的正确位置,但是,它在所有子OU上以相同的链接顺序放置GPO 1。例如,OU 1 GPO 2链接顺序为9,它将GPO 1放置在链接顺序9中,OU 2 GPO 2链接顺序为15,但它在应该将GPO 1放置在链接顺序15中时仍将其放置在链接顺序9中。

$gpoName = Read-Host -Prompt 'Enter the Group Policy Name you want to Link'
 $targetGpoName = Read-Host -Prompt 'Enter the name of the target Group Policy you want to base the Link order off of'
 $EnableLink = Read-Host -Prompt 'Enter Yes or No to enable link or not'

 # Get all OUs
 $ous = Get-ADOrganizationalUnit -SearchBase 'OU=OU,DC=DC,DC=DC,DC=DC,DC=DC,DC=DC'-Filter 'Name -like "Computers"'

 # Link the GPO to each OU
 foreach ($ou in $ous)
 {
 # Get the link order of the target GPO
 $link = (Get-ADOrganizationalUnit -SearchBase 'OU=OU,DC=DC,DC=DC,DC=DC,DC=DC,DC=DC' -Filter 'Name -like "Computers"' | Get-GPInheritance).GpoLinks | Where-Object displayname -EQ $targetGpoName | Select -ExpandProperty Order -first 1

# Link the GPO to the OU
    New-GPLink -Name $gpoName -Target $ou.DistinguishedName -LinkEnabled $EnableLink -Order $Link }

我在哪里犯了错误,让它做数学。最终,我将建立+ 1选项到一个读取主机提示符,但我会解决这个问题,一旦我弄清楚为什么我不能让PowerShell做简单的数学在这个脚本。
任何想法和帮助都将不胜感激。
谢谢

j1dl9f46

j1dl9f461#

看起来你得到了一个对象数组,很可能是一个对象有一个属性。记住Select -Property Order给你留下了一个对象有一个属性,Order。要扩展该属性的值并输出顺序值,你需要使用Select -ExpandProperty -Property Order。那么如果你想确保它不是一个数组,你也可以添加-First 1,这将确保只有1个值沿着管道传递。
您应该能够更改:

Select -Property Order

致:

Select -Property Order -Expand -First 1

那应该能解决你的问题。

pb3skfrl

pb3skfrl2#

我不知不觉中创建了一个重复的问题,这一个已经关闭(新手错误)。武装知识传授给我的所有乡亲,帮助,我已经能够修复脚本,它的工作完美的现在。下面是代码:

$gpoName = Read-Host -Prompt 'Enter the Group Policy Name you want to Link'
 $targetGpoName = Read-Host -Prompt 'Enter the name of the target Group Policy you want to base the Link order off of'
 $EnableLink = Read-Host -Prompt 'Enter Yes or No to enable link or not'
 $GPO = get-gpo -Name $targetGpoName

 # Get all OUs
 $ous = @(Get-ADOrganizationalUnit -SearchBase 'OU=OU,DC=DC,DC=DC,DC=DC,DC=DC,DC=DC'-Filter 'Name -like "Computers"'  | select distinguishedname)

 # Get link order and link the GPO to each OU
 foreach ($ou in $ous)
 {

 foreach ($link in $links){

  New-GPLink -Name $gpoName -order ((Get-GPInheritance -Target $OU.DistinguishedName).GpoLinks | Where-Object DisplayName -eq $targetGpoName | select -expandproperty order) -Target $ou.DistinguishedName -LinkEnabled $EnableLink

  }
  }

相关问题