首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在批处理脚本中验证计算机AD组成员身份时遇到问题,输出为空

在批处理脚本中验证计算机AD组成员身份时遇到问题,输出为空
EN

Stack Overflow用户
提问于 2020-12-10 09:44:13
回答 1查看 26关注 0票数 0

我正在尝试使用脚本来确定计算机对象列表是否是代码中由GroupA和GroupB表示的两个特定AD组(以及其他内容)的成员,但它在电子表格中返回的结果是空白的(下面的示例)。我没有接受过Powershell的任何正式培训,但在过去的一年左右的时间里,我一直在努力学习它。我通常不会寻求帮助,但我真的不能想出这个办法来拯救我的生命,我会永远感激任何帮助。

这是我遇到问题的代码:

代码语言:javascript
运行
复制
$comp = Import-CSV .\PCList.csv
$Results = 
$comp | foreach {
<#
Pulls information from each computer in the list
#>
    if ($true) {

        $IPv4Address = Get-ADComputer -identity $_.computer -properties * | select-object IPv4Address
        $Enabled = Get-ADComputer -identity $_.computer -properties * | select-object Enabled
        $CanonicalName = Get-ADComputer -identity $_.computer -properties * | select-object CanonicalName
        $LastLogonDate = Get-ADComputer -identity $_.computer -properties * | select-object LastLogonDate
        $groupA = Get-ADPrincipalGroupMembership (Get-ADComputer $_.computer) | select-object MemberOf |where-object {$_.SamAccountName -ccontains "GroupA"}
        $groupB = Get-ADPrincipalGroupMembership (Get-ADComputer $_.computer) | select-object MemberOf |where-object {$_.SamAccountName -ccontains "GroupB"}
        }
<#
Converts data to a formal name for the Output file
#>
        [PSCustomObject]@{
            'ComputerName'      = $_.computer
            'IPv4Address'       = $IPv4Address.IPv4Address
            'Enabled?'          = $Enabled.Enabled
            'OU'                = $CanonicalName.CanonicalName
            'Last Logon Date'   = $LastLogonDate.LastLogonDate
            'GroupA Membership?'= $groupA
            'GroupB Membership?'= $groupB
        }
        }
$Results | Export-Csv -Path .\Data.csv -NoTypeInformation

当我运行这段代码时,我得到了空白结果,其中AD组应该是:Example

更让我困惑的是,如果我在不同的脚本中运行这些命令,它们运行得很好,并产生预期的结果:

代码语言:javascript
运行
复制
$comp = Import-CSV .\PCList.csv
$Results = 
$comp | foreach {
<#
Pulls information from each computer in the list
#>
    if ($true) {
        $cn = Get-ADComputer -identity $_.computer -properties * | Select-Object -ExpandProperty DNSHostName
        $mo = Get-ADPrincipalGroupMembership (Get-ADComputer $_.computer) | select-object SamAccountName |where-object {$_.SamAccountName -ccontains "GroupA"}
        

<#
Converts data to a formal name for the Output file
#>
        [PSCustomObject]@{
            'ComputerName'         = $cn 
            'MemberOf'             = $mo.SamAccountName
            
            
        }
    }
<#
Error handling for systems that cannnot be reached or where data cannot be pulled, enters N/A for vaules in the output file
#>
    else {
        [PSCustomObject]@{
            'ComputerName'         = 'Unknown'
            'MemberOf'             = 'Unknown'

        } 
    }
  
}
$Results | Export-Csv -Path .\Data.csv -NoTypeInformation

我搞不懂为什么这段代码能在一个脚本中工作,而不能在另一个脚本中工作。请帮我学习如何解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-10 14:50:36

有几个问题。

首先,Get-ADPrincipalGroupMembership返回的对象没有memberof属性

接下来,如果该属性确实存在,当您使用Select-Object SomeProperty返回一个只包含该属性的对象时。因此,您将无法检查SamAccountName,因为它不存在于传递的对象中。

此外,当您确实只需要几个时,您可以选择-Properties * -这会增加域控制器的额外开销,并减慢整个脚本的运行速度。

最后,向Get-Adcomputer发出6个相同的调用,向Get-ADPrincipalGroupMembership发出2个相同的调用

这里有一种方法,可以只使用所需的属性进行所需的调用。

代码语言:javascript
运行
复制
$props = 'IPv4Address','Enabled','CanonicalName','LastLogonDate'

$computerlist = Import-CSV .\PCList.csv

$Results = foreach($computer in $computerlist)
{
    Get-ADComputer $computer.computer -Properties $props | Foreach-Object {
        $grps = Get-ADPrincipalGroupMembership $_ |
                Select-Object -ExpandProperty SamAccountName

        [PSCustomObject]@{
            ComputerName        = $computer.computer
            IPv4Address         = $_.IPv4Address
            'Enabled?'          = $_.Enabled
            'OU'                = $_.CanonicalName
            'Last Logon Date'   = $_.LastLogonDate
            'GroupA Membership?'= $grps -contains 'GroupA'
            'GroupB Membership?'= $grps -contains 'GroupB'
        }
    }
}

$Results | Export-Csv -Path .\Data.csv -NoTypeInformation
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65227373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档