写主机,循环问题,如何获取摘要字符串?

问题描述

所以我正在努力让我的脚本在运行时向屏幕输出一些信息。我有一些 foreach/if 循环似乎没有正确捕捉。假设我有类似的东西:

$ReportsTo = Get-adgroup -searchbase $ou -filter "Name -like 'Report to *'" | 
    where {$_.name -replace 'Report to ' -in $name} | 
    select name,samaccountname


Foreach ($manager in ($managers.SamAccountName)) { 

if ($manager -notin (($ReportsTo.Name) -replace 'Report to ')) { 
    new-adgroup -name "Report to $manager" -groupscope global -path $ou
    write-host = "New group for " + $manager + " has been created."
    
} else {
    write-host = "Group for " + $manager + " already exists."
    
}

在写入时,无论新组是创建还是已经存在,它都会在每次迭代时写入屏幕。无论该组是否实际存在,它都会这样做。假设 -path $ou 中存在一个名为“Report to Sam.Walton”的组并运行脚本。创建。 如果我在 ISE 中进行此调试,则永远无法让 $ReportsTo 打印值。所以也许那条线是错误的。

解决方法

如果 $name 是 SamAccountNames 的数组(只是字符串,而不是对象),那么为什么不像这样清理 $ReportsTo 数组:

$ReportsTo = Get-ADGroup -SearchBase $ou Filter "Name -like 'Report to *'" | 
    Where-Object {($_.Name -replace 'Report to ') -in $name} | 
    Select-Object @{Name = 'name'; Expression = {$_.Name -replace 'Report to '}},samaccountname

那么您的测试可以简化为:

if ($manager -notin ($ReportsTo.Name)) {..}

请告诉我们 $name 的具体内容。