【问题标题】:Out-File won't display what powershell ISE showsOut-File 不会显示 powershell ISE 显示的内容
【发布时间】:2018-10-12 01:20:51
【问题描述】:

好的,所以我是 Powershell 的初学者。 我在工作,所以我想自动做一些事情。我使用此脚本的工作是选择那些特定用户及其密码到期日期,将日期格式化为人类可读的格式,然后将所有内容保存在 txt 文件中以进行分析。

我当前的代码是这样的:

$List = Get-Content D:\Users\c05896\Desktop\VIPS.txt
$Users = @()

foreach ($Item in $List){
$Users += Get-ADUser -Filter * -Properties "msDSUserPasswordExpiryTimeComputed"| where {$_.Name -like "*$Item*"}}

$Users | Sort-Object | Select-Object Name, @{Name="Password expires";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed" )}}
Out-File -filepath D:\Users\c05896\Desktop\VIPLista.txt -InputObject $Users

所以,上面的脚本就是我写的。 Powershell ISE 内的输出如下:

Name                           Password expires         
----                           ---------------         
User 1                         10/11/2010 01:39:53 p.m.
User 2                         21/10/2018 10:21:43 a.m.
User 3                         21/10/2018 08:38:23 a.m.
.                                  .
.                                  .
.                                  .

这就是我想在 txt 文件中输出的内容,但我得到了这种格式:

DistinguishedName                   : CN=USER LASTNAME
OU=VIPs,OU=Users
Enabled                             : False
GivenName                           : USER LASTNAME
msDS-UserPasswordExpiryTimeComputed : 129192702049912335
Name                                : USER
ObjectClass                         : user
ObjectGUID                          : bb033273-6117-470b-9f07-aee2885a45bc
SamAccountName                      : B00057
SID                                 : S-1-5-21-808411757-1154953693-317593308-27012
Surname                             : USER
UserPrincipalName                   : XXXXX

出于隐私考虑,我删除了所有姓名和姓氏。

那么,问题是我该怎么做才能让 Out-File 显示在 Powershell ISE 上显示的信息?

非常感谢您的回答

【问题讨论】:

    标签: powershell


    【解决方案1】:
    # --> $Users = $Users | ...
    $Users = $Users | Sort-Object | Select-Object Name, @{Name="Password expires";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed" )}}
    Out-File -filepath D:\Users\c05896\Desktop\VIPLista.txt -InputObject $Users
    
    # or
    # combine ISE output with file output in one command using Tee-Object
    
    $Users | Sort-Object |
      Select-Object Name, @{Name="Password expires";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed" )}} | 
        Tee-Object -FilePath D:\Users\c05896\Desktop\VIPLista.txt
    
    【解决方案2】:

    关于如何实现您的目标,Nas 为您提供了一个很好的答案。我将尝试回答原因。

    当您使用 Get-ADUser 检索您的用户对象时,默认情况下会返回许多属性。您意识到这一点并使用 Select-Object 来选择要返回的属性,甚至添加了一个新的自定义属性。

    Select-Object 输出是 ISE 中显示的内容(如果您不使用 ISE 也会显示在控制台中)。

    您实际上没有做的是修改存储在 $Users 数组中的对象,因此当您将这些对象发送到 Out-File 时,它​​会收到对象的所有属性。

    Nas 为您提供的两个选项都会在 $Users 中的对象在管道中时对其进行修改,以便在将它们发送到 Out-File 时仅保留您想要输出到文件的属性。他的第一个示例实际上用新的 $Users 数组替换了原始的 $Users 数组,因此如果您随后检查它,将只保留您指定的属性。在他的第二个示例中,使用 Tee-Object,$Users 仍然保持未修改,如果您检查对象,您会发现它们仍然保留 DistinguishedName、Enabled、GivenName 等。

    【讨论】:

    • 旁观者认为有用,但就我个人而言,我发现这种非结构化文本块很难解析。
    • 感谢您的回答和您的时间来解释为什么它不起作用! :)
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    相关资源
    最近更新 更多