gpt4 book ai didi

powershell - 在Get-ADComputer中排序

转载 作者:行者123 更新时间:2023-12-03 01:24:31 26 4
gpt4 key购买 nike

我不擅长Powershell,所以我向社区寻求帮助。
任务是按不同文件过滤Get-ADComputer输出。按属性IPv4Address排序。在文件本身中,您需要查看所有具有排序的IPv4Address + Measure-Object输出的对象。
例。\

SAD-MAZINA                                                                                          192.168.8.172                                                                                      
SAD-DISPETCHER 192.168.8.173
SAD-POHORSKA 192.168.8.179
SAD-PROPUSKA 192.168.8.181
SAD-DERADMIN1 192.168.8.182
SAD-LIZUNKINA 192.168.8.184
SAD-CHEGLAKOV 192.168.8.33
184-DSKTP 192.168.8.34
LAPTOP-1 192.168.8.35
SAD-MAKAROVA 192.168.8.50
All 10
最初,我尝试使用 for 和(如果构造)来自己实现它,但是没有足够的知识来完成任务。任何帮助,谢谢!
例。\
$regex = [Regex]"192.168.0.*"

$scan = Get-ADComputer -Filter * -ResultPageSize 0 -Prop CN,lastLogonTimestamp,IPv4Address |
Where {[datetime]::FromFileTime($_.lastLogonTimestamp) -ge (Get-Date).AddDays(-30)} | Sort-Object -Property IPv4Address | FT CN,IPv4Address
foreach ($onepc in $scan){

if ($onepc = $regex){
out-file -filepath C:\comps192.168.csv
}
}

最佳答案

根据我的评论,您的代码有很多错误。
您正在定义一个正则表达式,它实际上是一个通配符字符串。稍后,您可以使用赋值运算符=将IP地址与此“regex”进行比较
通过使用| FT CN,IPv4Address,变量$ scan将包含一个字符串数组,而不是创建有效CSV文件所需的对象数组。
尝试

$ipRange = "192.168.0.*"
$refDate = (Get-Date).AddDays(-30).Date # set time part to all 0, so this date is midnight
$scan = Get-ADComputer -Filter * -Properties CN,LastLogonDate,IPv4Address |
Where {$_.LastLogonDate -ge $refDate -and $_.IPv4Address -like $ipRange} |
Sort-Object -Property @{Expression = {[int]($_.IPv4Address.Split(".")[-1])}}

# output to console
$scan | Format-Table -AutoSize

# output to CSV
$scan | Export-Csv -Path 'C:\comps192.168.csv' -NoTypeInformation
Sort-Object -Property @{Expression = {[int]($_.IPv4Address.Split(".")[-1])}}行使用计算所得的属性进行排序。在这种情况下,最后一个IP地址字节的整数值。这样,IP 192.186.0.2将在 192.168.0.11之前排序,而如果您对ip 字符串排序,则结果将相反。
同样,使用Get-ADComputer,您可以要求属性 LastLogonDate,它是已经转换为(本地)DateTime对象的 lastLogonTimeStamp的值。

编辑
如您所评论的,如果您的目的是测试IP地址是否在某个子网内,则可以使用以下帮助器功能
function Test-IsIPv4InSubnet ([string]$IpAndCidr, [string]$IpAddress) {
$network, [int]$subnetlen = $IpAndCidr.Split('/')
$a = [uint32[]]$network.split('.')
[uint32] $unetwork = ($a[0] -shl 24) + ($a[1] -shl 16) + ($a[2] -shl 8) + $a[3]

$subnetlen = [Math]::Min([Math]::Max([Math]::Abs($subnetlen), 0), 32)
$mask = (-bnot [uint32]0) -shl (32 - $subnetlen)

$a = [uint32[]]$IpAddress.split('.')
[uint32] $uip = ($a[0] -shl 24) + ($a[1] -shl 16) + ($a[2] -shl 8) + $a[3]

return ($unetwork -eq ($mask -band $uip))
}
将其放置在脚本顶部后,代码可以像这样:
$ipSubnet = "192.168.0.0/24"
$refDate = (Get-Date).AddDays(-30).Date # set time part to all 0, so this date is midnight
$scan = Get-ADComputer -Filter * -Properties CN,LastLogonDate,IPv4Address |
Where {$_.LastLogonDate -ge $refDate -and (Test-IsIPv4InSubnet $ipSubnet $_.IPv4Address)} |
Sort-Object -Property @{Expression = {[int]($_.IPv4Address.Split(".")[-1])}}

# output to console
$scan | Format-Table -AutoSize

# output to CSV
$scan | Export-Csv -Path 'C:\comps192.168.csv' -NoTypeInformation

关于powershell - 在Get-ADComputer中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64715542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com