5

私の目標は、PowerShellで、障害のないすべてのユーザーのAD表示名とパスワードの有効期限を示す単一のオブジェクトを作成することです。これは比較的簡単です。ただし、日付は読み取り不可能な形式で取得されるため、日付を変換します。

必要なデータを含む2つの変数の作成が機能しています。問題は、これら2つの変数を組み合わせようとすると、期待どおりに2つのヘッダーを持つ単一のオブジェクトが得られますが、以下の2つの列は空です。

Win 7ProSP1でPowerShellV2を使用しています

問題が何であるかについて何か考えはありますか?

# Get users DisplayName and password expiration time from AD
$msdsComputed = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq  $False} -Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |  
        Where-Object {$_.DisplayName -ne $null} 

# Convert date to human readable format
$ExpiryDate = $msdsComputed | Foreach-Object {
             ([datetime]::FromFileTime(($_)."msDS-UserPasswordExpiryTimeComputed")) 
                          } | Select-Object "DateTime"



$combined = @{            
              DisplayName   = $msdsComputed.DisplayName
              ExpiryDate    = $ExpiryDate.DateTime
             }
New-Object PSObject -Property $combined | ConvertTo-Csv -NoTypeInformation
4

1 に答える 1

10

ループの問題がないスクリプトの改訂版は次のとおりです。

$reportObject = @()
$userList = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq  $False} -Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |  Where-Object {$_.DisplayName -ne $null}
$userList | %{

    $output = "" | Select DisplayName, ExpiryDate
    $output.DisplayName = $_.DisplayName
    $output.ExpiryDate = ([datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")).DateTime
    $reportObject += $output
    #Next 2 Lines provide debugging... I'm not sure the date time portion will work without having AD to play with
    $output | fl *
    ([datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")).DateTime 
}

$reportObject | Convertto-CSV -NoTypeInformation
于 2012-07-19T18:56:20.913 に答える