输出文件赢得';无法显示powershell ISE显示的内容

输出文件赢得';无法显示powershell ISE显示的内容,powershell,Powershell,好吧,我是Powershell的初学者。 我在上班,所以我想买些东西。我使用这个脚本的工作是选择那些特定的用户及其密码过期日期,将日期格式化为人类可读的日期,然后将所有这些内容保存在一个txt文件中进行分析 我目前的代码是: $List = Get-Content D:\Users\c05896\Desktop\VIPS.txt $Users = @() foreach ($Item in $List){ $Users += Get-ADUser -Filter * -Properties "

好吧,我是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上显示的信息


非常感谢您的回答

关于如何实现您的目标,Nas为您提供了一个很好的答案。我要试着回答为什么

# --> $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
使用Get ADUser检索用户对象时,默认情况下会返回许多属性。您知道这一点,并使用Select Object来选择要返回的属性,甚至还添加了一个新的自定义属性

选择对象输出是ISE中显示的内容(如果您没有使用ISE,则会显示在控制台中)

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


Nas在上面提供的两个选项都会在$Users处于管道中时修改它们,以便在将它们发送到Out文件时,只保留要输出到文件的属性。他的第一个示例实际上用一个新的$Users数组替换了原来的$Users数组,这样,如果您随后检查它,则只会保留指定的属性。在他的第二个示例中,使用Tee Object,$Users仍然未被修改,如果您检查对象,您会发现它们仍然保留distrignedname、Enabled、GivenName等。关于如何实现您的目标,Nas有一个很好的答案。我要试着回答为什么

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

选择对象输出是ISE中显示的内容(如果您没有使用ISE,则会显示在控制台中)

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


Nas在上面提供的两个选项都会在$Users处于管道中时修改它们,以便在将它们发送到Out文件时,只保留要输出到文件的属性。他的第一个示例实际上用一个新的$Users数组替换了原来的$Users数组,这样,如果您随后检查它,则只会保留指定的属性。在他的第二个例子中,使用Tee Object,$Users仍然没有被修改,如果你检查对象,你会发现它们仍然保留discriminatedname、Enabled、GivenName等。

Tee Object Tee Object在旁观者的眼中是有用的,但就个人而言,我发现这个非结构化的文本块很难解析。感谢您的回答,感谢您花时间解释为什么它不起作用!:)从旁观者的角度看是有帮助的,但就我个人而言,我发现这段非结构化的文本很难解析。感谢您的回答,感谢您花时间解释它为什么不起作用!:)