【问题标题】:Output CSV file and net user command not aligned with PS command输出 CSV 文件和 net user 命令与 PS 命令不对齐
【发布时间】:2022-01-26 12:21:19
【问题描述】:

下面我有一个 PS 命令来获取一些有用的用户信息。我还想从带有 PC 名称的 csv 文件中获得输入。我怎样才能为所有内容提供相同的格式?

PC 名称后的冒号与我从get-aduser 的输出中得到的不同。有人可以告诉我该怎么做吗?

Example of what I've got

Clear-Host
do {

write-Host " Enter the user ID: " -ForegroundColor Cyan -NoNewline
$UserName = Read-Host
Write-Host ""


Get-ADUser -Identity $Username -Properties * |  Select-Object  DisplayName,  mail, LastLogonDate, LastBadPasswordAttempt, AccountExpirationDate, PasswordLastSet , OfficePhone, Department, Manager
    

$Processes = Import-CSV 'C:\Users\w0vlnd\Desktop\Powershells\Computers in a specific workgroup or domain.csv'
$processes | where "User ID" -like $Username | Select-Object "PC name" 


net user $Username /domain | find "Password expires" 
net user $Username /domain | find "Password changeable" 
write-host "`n"


} while ($Username -notcontains $Processes)

【问题讨论】:

  • 您通过net user $UserName 获得的最后两项...数据来自哪里?我在为Get-ADUser 列出的属性中找不到它,但我可以在Get-LocalUser 的输出中找到它。
  • 我很困惑。您的问题是 Net userGet-ADUser 的结果不适合同一用户吗?
  • 不是数据没有对齐,而是格式/布局不一样……
  • 使用 netuser 命令获取我无法从 get-aduser 获取的数据。我从 csv 文件中获得了电脑名称

标签: powershell layout format get-aduser


【解决方案1】:

您可以构造一个对象,将 AD 用户与来自 CSV 的信息和来自 net user 的信息合并。以下是您如何处理它的示例:

$csv = Import-CSV 'path\to\csvhere.csv'
$ADprops = @(
    'DisplayName'
    'mail'
    'LastLogonDate'
    'LastBadPasswordAttempt'
    'AccountExpirationDate'
    'PasswordLastSet'
    'OfficePhone'
    'Department'
    'Manager'
)

$filter = @(
    $ADprops
    @{
        Name = 'PC Name'
        Expression = { $pcName }
    }, @{
        Name = 'Password Changeable'
        Expression = { $changeable }
    }, @{
        Name = 'Password Expires'
        Expression = { $expires }
    }
)

Clear-Host
do
{
    Write-Host " Enter the user ID: " -ForegroundColor Cyan -NoNewline
    $UserName = Read-Host
    Write-Host ""

    $pcName = $csv.Where({ $_."User ID" -match $Username })."PC Name"
    $expires, $changeable = net user $Username /domain |
    Select-String -Pattern 'Password Changeable|Password Expires' |
    ForEach-Object { ($_ -split '\s{2,}')[1] }
    Get-ADUser -Identity $Username -Properties $ADprops |
    Select-Object $filter

} while ($csv.'User ID' -notcontains $Username)

【讨论】:

  • 谢谢!这对我来说非常有效!
  • @Toon 很高兴它为您工作。如果对您有用,请考虑accepting
猜你喜欢
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多