【问题标题】:Powershell searching for specific description on computersPowershell在计算机上搜索特定描述
【发布时间】:2021-10-04 03:01:51
【问题描述】:

在我的组织中,计算机上的“描述”属性会自动更新上次登录的人员和时间,因此看起来像这样“OU,USERNAME,DATE AND TIME” 例子: IT-afdelingen,chrijen,28-07-2021 08:16:12

我想在描述中搜索 USERNAME,以便查看用户最后登录的电脑。


这不起作用,因为我似乎不能在 ** 之间使用 $hanne

$hanne = "dthamyl","chrijen","bjokjer"
foreach ($item in $hanne) {Get-ADComputer -filter "description -like '*$hanne*'"}

如果我像这样将用户名放在变量中,它会起作用

    $hanne = "*dthamyl*","*chrijen*","*bjokjer*"

基本上我想获取一堆显示名称并找到他们的用户名并使用用户名来查看他们使用的计算机

$navne = "DISPLAYNAME","DISPLAYNAME","DISPLAYNAME","DISPLAYNAME","DISPLAYNAME","DISPLAYNAME","DISPLAYNAME"

$usernames = foreach ($user in $navne) {get-aduser -filter "displayname -eq '$user'" | select samaccountname}

foreach ($item in $usernames) {

Get-ADComputer -Filter "description -like '$item'"}

【问题讨论】:

    标签: windows powershell active-directory


    【解决方案1】:

    如果我理解正确,Description 属性包含已登录用户的 SamAccountName,并且您希望根据用户的 SamAccountNames 数组查找这些计算机。

    在这种情况下,这应该可以帮助您:

    # create an array of user SamAccountnames to look for in the Description property of the computers
    $navne = "dthamyl","chrijen","bjokjer"
    
    # create a regex from all usernames in $navne combined with the regex 'OR' character
    # for safety, use [regex]::Escape() on each to escape characters that have special meaning in regex.
    $users = ($navne | ForEach-Object { [regex]::Escape($_) }) -join '|'
    
    # get the computer objects and use a Where-Object clause to filter on computers
    # where the Description matches the users regex
    Get-ADComputer -Filter * -Properties Description | Where-Object { $_.Description -match $users } | 
        Select-Object @{Name = 'ComputerName'; Expression = {$_.Name}},
                      @{Name = 'User'; Expression = { ($_.Description -split ',')[1]}}
    

    【讨论】:

    • 非常感谢 :) 我最终并没有完全按照你的方式使用它,因为我在 powershell 方面仍然很糟糕,但我使用了你的一些想法来让它工作.. 它最终看起来像这样 #array of DisplayNames $navn = "displayname","displayname","displayname" #array of SamAccountnames found from the DisplayNames $navne = foreach ($item in $navn) {get-aduser -filter "displayname -eq ' $项目'" |选择 samaccountname} foreach ($user in $navne) { Get-ADComputer -Filter * -Properties description | Where-Object { $_.description -match $user.samaccountname} |选择名称,描述}
    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多