输出文件不会显示 ISE 显示的电源外壳



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

我当前的代码是这样的:

$List = Get-Content D:Usersc05896DesktopVIPS.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:Usersc05896DesktopVIPLista.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上显示的信息?

非常感谢您的回答

# --> $Users = $Users | ...
$Users = $Users | Sort-Object | Select-Object Name, @{Name="Password expires";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed" )}}
Out-File -filepath D:Usersc05896DesktopVIPLista.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:Usersc05896DesktopVIPLista.txt

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

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

选择对象输出是ISE中显示的输出(如果您不使用ISE也会在控制台中显示(。

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

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

最新更新