0

powershell は初めてで、出力ファイルの SamAccountName 列が空である理由がわかりません。一方、IsDisabled 列にはアカウント ステータスの結果が含まれます。

Import-Csv $filename | Foreach-Object{

    $user = ([ADSISEARCHER]"(samaccountname=$($_.SamAccountName))").FindOne()

    if($user)
    {
        New-Object -TypeName PSObject -Property @{
            SamAccountName = $user.SamAccountName
            IsDisabled = $user.GetDirectoryEntry().InvokeGet('AccountDisabled')
        }
    }
    else
    {
            Write-Warning "Can't find user '$($_.SamAccountName)'"
    }
} | Export-Csv $filename
4

3 に答える 3

0

IIRC これは、大文字と小文字を区別する LDAP プロパティ名に関する既知の問題 (バグ) です。大文字と小文字を気にせずにハッシュテーブル構文を使用できることを回避するには、次のようにします。

$user.Properties['SAMACCOUNTNAME']
于 2013-03-05T09:08:11.373 に答える
0

返されるプロパティの 1 つとして sAMAccountName を指定する必要があります。さらに、userAccountControl プロパティを指定し、ADS_UF_ACCOUNTDISABLE ビットをテストして、ユーザー アカウントが無効になっているかどうかを確認できます。これにより、無効になっているかどうかをテストするために各ユーザー オブジェクトにバインドするオーバーヘッドが回避されます。短いサンプル スクリプトを次に示します。

param(
  [String[]] $sAMAccountName
)

$ADS_UF_ACCOUNTDISABLE = 2

$sAMAccountName | foreach-object {
  $searcher = [ADSISearcher] "(sAMAccountName=$($_))"
  $searcher.PropertiesToLoad.AddRange(@("samaccountname","useraccountcontrol"))
  $result = $searcher.FindOne()
  if ( $result ) {
    $samName = $result.Properties["samaccountname"][0]
    $disabled = ($result.Properties["useraccountcontrol"][0] -band
      $ADS_UF_ACCOUNTDISABLE) -ne 0
    new-object PSObject -property @{
      "Name" = $samName
      "Disabled" = $disabled
    }
  } else {
    write-warning "Can't find user $_"
  }
}

明細書

于 2013-03-04T16:31:50.327 に答える