Out-File将不显示Powershell ISE显示的内容

时间:2018-10-09 22:09:58

标签: powershell

好,所以我是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

为了隐私起见,我删除了所有姓名和姓氏。

因此,问题是我该怎么做才能使出文件显示Powershell ISE上显示的信息?

非常感谢您的回答

2 个答案:

答案 0 :(得分:3)

# --> $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

答案 1 :(得分:1)

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

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

Select-Object输出是ISE中显示的内容(如果您还没有使用ISE,则该内容将显示在控制台中)。

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

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