【问题标题】:Unable to capture workstations details with Empty group无法使用空组捕获工作站详细信息
【发布时间】:2020-08-06 19:24:54
【问题描述】:

我有以下代码来捕获名为 Remote Desktop 的本地组的成员,并提供总工作站和已配置 RDP 用户的工作站数量的报告。但是如果本地组 Remote Desktop 没有成员,它会以某种方式无法捕获机器详细信息。

我什至尝试 if($members -eq $null) 来捕获工作站列表,但没有成功。任何帮助将不胜感激。

$ExportPath = 'c:\temp\Workstations.csv'
$OUData = import-csv c:\temp\workstations_OU.csv

$selectprops = @(
    'Name',
    'DNSHostName',
    'Description',
    'OperatingSystem',
    'LastLogonDate',
    'CanonicalName',
    @{N='OUPath';e={$OUpath}},
    @{N='Server';e={$Server}}
)

$OUexport = foreach($OU in $OUdata)
{
    $OUpath = $OU.ou
    $server = $OU.server
    Get-ADComputer -Filter * -Property * -SearchBase $OUpath -Server $server | 
        Select-object $selectprops | Export-Csv -NoType -Append -force $ExportPath
}

$OUData = import-csv c:\temp\Workstations.csv

$RDP = foreach($data in $OUdata)
{
    $ComputerName = $data.Name
    $Server = $data.Server

    Get-ADComputer $ComputerName -Property memberof -Server $server | Select-object memberof | %{
        if ($_.MemberOf -like '*RemoteDesktop*') {$remote_desktop = "Enabled"}  else {$remote_desktop = "Disabled"}}

    $Description = $data.description
    $DNSHostname = $Data.DNSHostName
    $LogonDate = $Data.LastLogonDate
    $Operatingsystem =  $Data.OperatingSystem

    $ping = Test-Connection -ComputerName $DNSHostname -Count 1 -ErrorAction SilentlyContinue

    if ($ping)
    {
        $ping_status = "up"
        $error.clear()

        Try
        {  
            $Group = [ADSI]("WinNT://$DNSHostname/Remote Desktop")
            $members = @($group.psbase.Invoke("Members")) 
                $Path  = $Null
                $Name = $Null
    
            if($members -eq $null)
            {
                [pscustomobject]@{
                    Workstation = $ComputerName
                    Comp_Description = $Description
                    DNS_Hostname = $DNSHostname
                    RDP_Status = $remote_desktop
                    PING_Status = $ping_status
                    LastLogonDate = $LogonDate
                    OPeratingSystem = $Operatingsystem
                    ADSPath  = $path
                    Name = $name
                }
            }
            else
            {
                $members | foreach {
                    $name = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
                    $path = $_.GetType().InvokeMember("ADsPath", 'GetProperty', $null, $_, $null)

                    [pscustomobject]@{
                        Workstation = $ComputerName
                        Comp_Description = $Description
                        DNS_Hostname = $DNSHostname
                        RDP_Status = $remote_desktop
                        PING_Status = $ping_status
                        LastLogonDate = $LogonDate
                        OPeratingSystem = $Operatingsystem
                        ADSPath  = $path
                        Name = $name
                    }
                }
            }
        }
        Catch
        {
            [pscustomobject]@{
                Workstation = $ComputerName
                Comp_Description = $Description
                DNS_Hostname = $DNSHostname
                RDP_Status = $remote_desktop
                PING_Status = $ping_status
                LastLogonDate = $LogonDate
                OPeratingSystem = $Operatingsystem
                ADSPath  = $null
                Name = $null
            }
        }
    }
    else
    {
        $ping_status = "down"

        [pscustomobject]@{
            Workstation = $ComputerName
            Comp_Description = $Description
            DNS_Hostname = $DNSHostname
            RDP_Status = $remote_desktop
            PING_Status = $ping_status
            OperatingSystem = $Operatingsystem
            LastLogonDate = $LogonDate
            ADSPath  = $null
            Name = $null
        }
    }
}

$RDP | export-csv c:\temp\RDP.csv -NoTypeInformation -force

【问题讨论】:

    标签: powershell powershell-4.0 powershell-remoting


    【解决方案1】:

    感谢道格的编辑。我已经设法通过以下方式获得空组

     $members = @($group.psbase.Invoke("Members")) 
            $Path  = $Null
            $Name = $Null
     $member_count = ($members | measure).count
     if($member_count -eq "0")
     {
     [pscustomobject]@{
            Workstation = $ComputerName
            Comp_Description = $Description
            DNS_Hostname = $DNSHostname
            RDP_Status = $remote_desktop
            PING_Status = $ping_status
            LastLogonDate = $LogonDate
            OPeratingSystem = $Operatingsystem
            ADSPath  = $path
            Name = $name
            FullName = $fullname
     
     }
     }
     else
     {
     $members | foreach {
            $name = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
            $path = $_.GetType().InvokeMember("ADsPath", 'GetProperty', $null, $_, $null)
    [pscustomobject]@{
            Workstation = $ComputerName
            Comp_Description = $Description
            DNS_Hostname = $DNSHostname
            RDP_Status = $remote_desktop
            PING_Status = $ping_status
            LastLogonDate = $LogonDate
            OPeratingSystem = $Operatingsystem
            ADSPath  = $path
            Name = $name
            FullName = $fullname
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-07
      • 2020-10-08
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2013-12-15
      相关资源
      最近更新 更多