powershell - 无法使用空组捕获工作站详细信息
问题描述
我有以下代码来捕获名为Remote Desktop的本地组的成员,并提供配置了 RDP 用户的总工作站和工作站数量的报告。但是,如果本地组远程桌面没有成员,它会以某种方式无法捕获机器详细信息 。
我什至尝试 使用 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
解决方案
感谢道格的编辑。我已经设法通过以下方式获得空组
$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
}
推荐阅读
- dart - 遍历 Dart 中的类列表
- r - 在分组后在 R 中使用 Levene 测试时出错 [错误:不是数字变量]
- r - R 重复行的连接类型
- azure - 带有 agic 的 Azure AKS - 如何使用 Terraform 创建它?
- html - 从草稿 js 编辑器导出 html 并保持样式
- go - 如何使用 Go 将文档 ID 作为字段值 Firestore 插入
- php - 如何在最短的时间内将 20k xml 文件数据保存到 codeigniter 中的 mysql?
- scala - 从列表中创建加特林馈线
- automated-tests - 空手道 - 如何将变量值放入驱动程序配置(在 JS 中配置,在特性中读取值 - 背景)
- mongodb - 从 MongoDB 中的所有文档中获取数组字段的第一个元素的总和