PowerShell If Else逻辑不正常

PowerShell If Else逻辑不正常,powershell,Powershell,现在我的语法问题已经解决了(请不要看缺少的下划线,这是网站上的一个问题),我很难用经理(组或用户)的“显示名称”填充“ManagedBy”字段。出于这样或那样的原因,我的if/else逻辑并不可靠,因为它只返回blancs $When = ((Get-Date).AddDays(-21)).Date Get-ADGroup -SearchBase "OU=Groups,OU=BEL,OU=EU,DC=domain,DC=net" -Filter {whenCreated -ge $When}

现在我的语法问题已经解决了(请不要看缺少的下划线,这是网站上的一个问题),我很难用经理(组或用户)的“显示名称”填充“ManagedBy”字段。出于这样或那样的原因,我的if/else逻辑并不可靠,因为它只返回blancs

$When = ((Get-Date).AddDays(-21)).Date  
Get-ADGroup -SearchBase "OU=Groups,OU=BEL,OU=EU,DC=domain,DC=net" -Filter {whenCreated -ge
$When} -Properties * |  Select whenCreated, cn, displayName,
GroupScope, GroupCategory, description, info, @{    
Label='managedBy';
Expression={    
if(Get-ADObject $_.managedBy.ObjectClass -eq "User" ) { (Get-ADUser $_.Manager -Properties displayName).displayName}    
Else{
     (Get-ADGroup $_.managedBy -Properties cn).cn 
     } 
  } 
} | Export-Csv
 "New groups -21 days.csv" -NoTypeInformation -Delimiter ";" -Encoding
 utf8; start "New groups -21 days.csv"

谢谢您的帮助。

似乎与问题是同一个问题:

变量扩展在scriptblock筛选器中不起作用。尝试切换到可扩展的字符串筛选器

Get-ADGroup -SearchBase "OU=Groups,OU=BEL,OU=EU,DC=domain,DC=net" -Filter "whenCreated -ge '$When'" -Properties * 
试试这个,您的初始Get广告组工作正常(在win2012上),需要调整的是if/else

$When = ((Get-Date).AddDays(-21)).Date 
Get-ADGroup -SearchBase "OU=Groups,OU=BEL,OU=EU,DC=domain,DC=net" -Filter {whenCreated -ge
$When} -Properties * |  Select whenCreated, cn, displayName,
GroupScope, GroupCategory, description, info, 
@{
    Label='managedBy';
    Expression={
        $m = Get-ADObject -Identity $_.managedBy -Properties displayName,cn
        if($m.ObjectClass -eq "user") {
            $m.displayName} 
        Else{
            $m.cn
        }
    }
}

缺少下划线不是这样的问题。问题是你粘贴代码的方式很糟糕……对不起,我在上面用了引号。你能告诉我更好的方法是什么吗?到时候我会修好的。我已经为你修好了。我已经删除了每行代码前面的
符号。我现在明白了,我只需要在前面放4个空格,明白了!泰克斯:不!请看这里:我真的不明白。。你能再清楚一点吗?我是PowerShell和脚本方面的新手,对此我很抱歉。这是AD Get-*cmdlet筛选器的一种特性。您可以使用筛选器脚本块或筛选器字符串。脚本块中的变量不会展开,但如果在可展开字符串中使用字符串过滤器,它们会展开。谢谢Raf!我已经为此奋斗了很长一段时间了,我真的很高兴在你的帮助下它终于开始工作了。谢谢你,伙计!