Active Directory からユーザーのリストをエクスポートする方法。 Get-ADUser を使用して AD ドメイン ユーザーに関するさまざまな情報を取得する

17.05.2019 プログラムとサービス

この記事では、PowerShell のグループ管理機能について見ていきます。 ドメインアクティブディレクトリ。 作成方法を見ていきます 新しい集団 AD では、ユーザーの追加 (または削除)、グループ ユーザーのリストの表示、および日常の管理に非常に役立つドメイン グループに関するその他のいくつかの便利なアクションを実行できます。 PowerShell モジュールで AD グループを管理するには アクティブディレクトリ次の主なコマンドレットが使用可能です。

PowerShell セッションでこれらのコマンドレットを使用するには、特別な AD インタラクション モジュールを読み込む必要があります。 Active Directoryモジュール Windows用パワーシェル。 このモジュールは最初に提示されました Windowsサーバー 208R2。 Windows Server 2012 以降では、このモジュールはデフォルトで有効になっています。 クライアント コンピューターでは、RSAT コンポーネントの 1 つとしてインストールして有効にすることができます。 次のようにモジュールがロードされているかどうかを確認できます。

Get-Module -Listavailable

ご覧のとおり、ActiveDirectory モジュールがロードされています。 そうでない場合は、次のコマンドを使用してインポートします。

インポートモジュールのアクティブディレクトリ

モジュール コマンドの完全なリストは、次のようにして取得できます。

Get-Command -Module ActiveDirectory

このモジュールでは合計 147 のコマンドレットが利用可能で、そのうち 11 はグループで動作できます。

Get-Command -Module ActiveDirectory -Name "*グループ*"

彼らのリストは次のとおりです。

  • ADPrincipalGroupMembership の追加
  • Get-ADAccountAuthorizationGroup
  • ADグループの取得
  • Get-ADGroupMember
  • Get-ADPrincipalGroupMembership
  • 新しいADグループ
  • ADグループの削除
  • 削除-ADPrincipalGroupMembership
  • セット-ADGroup

コマンドを使用して、指定した Active Directory コンテナ (OU) に新しいグループを作成しましょう 新しいADグループ:

New-ADGroup "TestADGroup" -path "OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru" -GroupScope Global -PassThru –Verbose

属性の使用 説明グループの説明を指定できます。 表示名表示名を変更します。

パラメータ グループスコープ次のグループ タイプのいずれかを指定できます。

  • 0 = ドメインローカル
  • 1 = グローバル
  • 2 = ユニバーサル

次のように配布グループを作成できます。

New-ADGroup "TestADGroup-Distr" -path "OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru" -GroupCategory Distribution -GroupScope Global -PassThru –Verbose

Add-AdGroupMember – ユーザーを AD グループに追加します

追加機能を使用して、Active Directory グループにユーザーを追加できます。 広告グループメンバー。 新しいグループに 2 人のユーザーを追加しましょう。

Add-AdGroupMember -Identity TestADGroup -メンバー user1、user2

グループに追加する必要があるユーザーのリストが非常に大きい場合は、アカウントのリストを CSV ファイルに保存してからインポートできます。 このファイル各ユーザーをグループに追加します。

CSV ファイルの形式は次のとおりです (1 行に 1 つのユーザーのリスト、列名 - ユーザー)

インポート-CSV .\users.csv -ヘッダー ユーザー | ForEach-Object (Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users)

1 つのグループ (groupA) のすべてのメンバーを取得し、別のグループ (groupB) に追加するには、次のコマンドを使用します。

Get-ADGroupMember "グループA" | Get-ADUser | ForEach-Object(Add-ADGroupMember -Identity "Group-B" -Members$_)

すべてのネストされたグループのメンバーを新しいグループに (再帰的に) コピーする必要がある場合は、次のコマンドを使用する必要があります。

Get-ADGroupMember -Identity "GroupA" -Recursive | Get-ADUser | ForEach-Object(Add-ADGroupMember -Identity "GroupB" -Members$_)

Remove-ADGroupMember – グループからユーザーを削除します

AD グループからユーザーを削除するには、Remove-ADGroupMember コマンドを使用する必要があります。 グループから 2 人のユーザーを削除しましょう。

Remove-ADGroupMember -Identity TestADGroup -Members user1、user2

グループからユーザーを削除することを確認します。

CSV ファイルのリストに従ってグループからユーザーを削除する必要がある場合は、次のコマンドを使用します。

インポート-CSV .\users.csv -ヘッダー ユーザー | ForEach-Object (Remove-ADGroupMember -Identity ‘TestADGroup’ -members $_.users)

Get-ADGroup – AD グループに関する情報を取得します

このコマンドレットは、グループに関する情報を取得するのに役立ちます ADグループの取得:

Get-ADGroup "TestADGroup"

このコマンドは、グループの主な属性 (DN、グループ タイプ、名前、SID) に関する情報を表示します。 すべての AD ドメイン グループ属性の値を表示するには、次のコマンドを実行します。

Get-ADGroup "TestADGroup" -properties *

ご覧のとおり、グループの作成と変更の時刻、説明などの属性が表示されます。

Get-ADGroup コマンドレットを使用すると、特定のパターンを使用して、関心のあるすべてのグループを検索できます。 たとえば、名前に次のフレーズが含まれるすべての AD グループを検索する必要があります。 管理者 :

Get-ADGroup -LDAPFilter "(name=*admins*)" | フォーマットテーブル

Get-ADGroupMember – AD グループ ユーザーのリストを表示します

グループ ユーザーのリストを表示します。

Get-ADGroupMember "TestADGroup"

ユーザー名のみを結果に残すには、次を実行します。

Get-ADGroupMember "TestADGroup"| フィート名

このグループに他のドメイン グループが含まれている場合、表示するには 完全なリストすべてのネストされたグループを含むメンバーはパラメータを使用します 再帰的.

Get-ADGroupMember ‘server-admins" -recursive| ft 名

特定のグループに属するアカウントのリストを (後で Excel で使用するために) CSV ファイルにエクスポートするには、次のコマンドを実行します。

Get-ADGroupMember ‘server-admins" -recursive| ft samaccountname| Out-File c:\ps\admins.csv

AD のユーザー アカウント データをテキスト ファイルに追加するには、コマンドレットを使用します。 たとえば、アカウントに加えて、グループ ユーザーの役職と電話番号を表示する必要があります。

Get-ADGroupMember -Identity 'server-admins' -recursive| foreach ( Get-ADUser $_ -properties title, OfficePhone|Select-Object title, OfficePhone )

(Get-ADGroupMember -Identity "ドメイン管理者").Count

「ドメイン管理者」グループには 7 つの管理者アカウントがあることがわかりました。

特定の OU 内の空のグループのリストを検索するには、次のコマンドを使用します。

Get-ADGroup -Filter * -Properties Members -searchbase “OU=Moscow,DC=corp,dc=winitpro,DC=ru” | ここで (-$_.members ではありません) | 名前を選択

0

CSV ファイル内のユーザーの大規模なリストが AD グループのメンバーであるかどうかを確認し、結果を results.csv に書き込む次の作業スクリプトがあります。

$group = "InfraLite" を $group = DC .\List_Of_AD_Groups.CSV に変更できるようにスクリプトを変換する方法がわかりません。

したがって、スクリプトは 1 つの AD グループの一致を返すだけでなく、List_of_AD_groups.csv に含まれる 80 個の AD グループの一致を返します。 新しい CSV 列に各 AD グループに対して YES/NO を書き込む (または、これが不可能な場合は、グループごとに結果を含む個別の CSV ファイルを作成することでも同様のことが行われます)。

$group の値とエクスポート ファイル名を変更し、スクリプトを 80 回再実行することでこれを手動で行うこともできますが、これを行うには PS をすばやく使用する必要があります。

たとえば、results.csv?:

名前 AD_GROUP1 AD_GROUP2 AD_GROUP80 など user1 はい いいえ はい user2 いいえ いいえ はい user3 いいえ はい いいえ echo "UserName`InfraLite" >> results.csv $users = GC .\user_list.csv $group = "InfraLite" $members = Get-ADGroupMember -Identity $group -Recursive | -ExpandProperty SAMAccountName foreach ($users の $user) を選択します ( if ($members -contains $user) ( echo "$user $group`tYes" >> results.csv ) else ( echo "$user`tNo" >> results .csv))

  • 2 つの回答
  • 並べ替え:

    活動

0

問題に対する簡単な解決策は、既存のコードを別のループでラップし、グループごとに出力ファイルを作成することです。

$groups = Get-Content "C:\groups.txt" foreach ($groups の $group) ( $members = Get-ADGroupMember ... ...)

より洗練されたアプローチは、グループ マッピング テンプレートを作成し、それをユーザーごとに複製し、そのコピーにユーザーのグループ メンバーシップを設定することです。 次のようなものが機能するはずです。

$template = @() Get-Content "C:\groups.txt" | ForEach-Object ( $template[$_] = $false ) $groups = @() Get-ADGroup -Filter * | ForEach-Object ( $groups[$_.DistinguishedName] = $_.Name ) Get-ADUser -Filter * -Properties MemberOf | ForEach-Object ( $groupmap = $template.Clone() $_.MemberOf | ForEach-Object ( $groups[$_] ) | Where-Object ( $groupmap.ContainsKey($_) ) | ForEach-Object ( $groupmap [$_] = $true ) New-Object -Type PSObject -Property $groupmap ) | エクスポート-Csv "C:\user_group_mapping.csv" -NoType

0

私はしばらくこれで遊んできましたが、あなたが求めていたものを正確に得る方法を見つけたと思います。

アンスガーは正しい軌道に乗っていたと思うが、その後に続くことをさせることができなかった。 彼は、この記事の執筆時点では AD 環境にアクセスできなかったと述べました。

私が思いついたのは次のとおりです。

$UserArray = Get-Content "C:\Temp\Users.txt" $GroupArray = Get-Content "C:\Temp\Groups.txt" $OutputFile = "C:\Temp\Something.csv" # ハッシュテーブルのセットアップ後で使用するには $UserHash = New-Object -TypeName System.Collections.Hashtable # ユーザーとメンバーシップを UserHash に追加する外側のループ $UserArray | ForEach-Object( $UserInfo = Get-ADUser $_ -Properties MemberOf # LPAP 構文をグループの SAMAccountName のみに取り除きます $Memberships = $UserInfo.MemberOf | ForEach-Object( ($_.Split(",")) .replace("CN=","") ) #User=Membership ペアをハッシュに追加 $UserHash.Add($_,$Memberships) ) #ユーザーごとにオブジェクトを作成する外側のループ $Results = $UserArray | ForEach-Object( # まず単純なオブジェクトを作成します $User = New-Object -TypeName PSCustomObject -Property @( Name = $_ ) # $GroupArray に基づいてメンバーをオブジェクトに動的に追加します $GroupArray | ForEach-Object ( #Checking $UserHash グループがユーザーのメンバーシップ リストに表示されるかどうかを確認します $UserIsMember = $UserHash.($User.Name) -contains $_ #オブジェクトにプロパティを追加し、値 $User | Add-Member -MemberType NoteProperty -Name $ _ -Value $UserIsMember ) #オブジェクトを変数に返す Return $User ) #オブジェクトを CSV に変換して出力 $Results |

すべて意味があることを祈りましょう。 できる限りコメントさせていただきました。 これを実行しているマシンに RSAT がインストールされていない場合、ADSI に変換するのは非常に簡単です。 必要な場合はお知らせください。すぐに変更させていただきます。

PowerShell を使用して AD を管理することに特化しています。 出発点として、著者は 10 の一般的な AD 管理タスクを取り上げ、PowerShell を使用してそれらを簡素化する方法を検討することにしました。

  1. ユーザーパスワードをリセットする
  2. アカウントのアクティブ化と非アクティブ化
  3. ユーザーアカウントのロックを解除する
  4. アカウントを削除する
  5. 空のグループを探す
  6. ユーザーをグループに追加する
  7. グループメンバーのリストを表示する
  8. 古いコンピュータアカウントを見つける
  9. コンピュータアカウントを非アクティブ化する
  10. タイプ別にコンピュータを検索する

さらに、著者はブログを管理しています (もちろん PowerShell を使用しています)。jdhitsolutions.com/blog を参照することをお勧めします。 最新情報はTwitterから入手できます twitter.com/ジェフヒックス.
ということで、以下は「Top 10 Active Directory Tasks Solved with PowerShell」という記事の翻訳です。

Active Directory (AD) 管理 Windowsを使用する PowerShell はあなたが思っているよりも簡単です。それを証明したいと思います。 以下のスクリプトを取得して使用するだけで、さまざまな AD 管理タスクを解決できます。

要件

PowerShell を使用して AD を管理するには、いくつかの要件を満たす必要があります。 Windows 7 コンピューターを例として、AD コマンドレットがどのように機能するかを説明します。
コマンドレットを使用するには、Windows Server 2008 R2 ドメイン コントローラーが必要です。または、従来の DC に Active Directory 管理ゲートウェイ サービスをダウンロードしてインストールできます。 インストールする前にドキュメントをよくお読みください。 CD の再起動が必要です。
クライアント側で、Windows 7 または Windows 8 用の (RSAT) をダウンロードしてインストールします。 Windows 7 では、次の場所で開く必要があります。 コントロールパネル ( コントロールパネル) プログラムそして選択してください Windowsの機能をオンまたはオフにします。 探す リモートサーバー管理ツールセクションを展開します 役割管理ツール。 AD DS および AD LDS ツールに適切な項目を選択します。特に、項目を選択する必要があることに注意してください。 Active Directory モジュール Windows PowerShell 図 1 に示すように、(Windows 8 では、すべてのツールがデフォルトで選択されています)。 これで作業の準備が整いました。

図 1 AD DS および AD LDS ツールの有効化

ドメイン管理者権限を持つアカウントでログインしています。 ここで紹介するコマンドレットのほとんどでは、代替資格情報を指定できます。 いずれにせよ、ヘルプを読むことをお勧めします ( 助けを得ます) とその例を以下に示します。
PowerShell セッションを開始し、モジュールをインポートします。

PS C:\> インポートモジュール ActiveDirectory

インポートにより新しい PSDrive が作成されますが、それは使用しません。 ただし、インポートされたモジュールで使用可能なコマンドを確認できます。

PS C:\> get-command -module ActiveDirectory

これらのコマンドの利点は、1 つの AD オブジェクトでコマンドを使用できる場合、そのコマンドを 10、100、さらには 1000 の AD オブジェクトでも使用できることです。これらのコマンドレットのいくつかがどのように機能するかを見てみましょう。

タスク 1: ユーザーのパスワードをリセットする

ユーザーのパスワードをリセットするという一般的なタスクから始めましょう。 これはコマンドレットを使用して簡単に行うことができます ADAccountPassword の設定。 難しい部分は、新しいパスワードが保護された文字列、つまり PowerShell セッション中に暗号化されてメモリに保存されるテキストとして修飾される必要があることです。 まず、新しいパスワードを使用して変数を作成しましょう。
PS C:\> $new=Read-Host "新しいパスワードを入力してください" -AsSecureString

次に、新しいパスワードを入力します。

これで、アカウントを抽出できるようになりました(次を使用) サムアカウント名最良の選択肢) して、新しいパスワードを設定します。 ユーザー Jack Frost の例を次に示します。

PS C:\> Set-ADAccountPassword jfrost -NewPassword $new

残念ながら、このコマンドレットにはバグがあります。 -パススルー, -もしも、 そして -確認する動作しません。 ショートカットを使用したい場合は、これを試してください。

PS C:\> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String "P@ssw0rd1z3" -force)

その結果、ジャックが次回ログインするときにパスワードを変更する必要があるため、次を使用してアカウントを変更します。 Set-ADUser.

PS C:\> Set-ADUser jfrost -ChangePasswordAtLogon $True

コマンドレットの実行結果はコンソールに書き込まれません。 これを行う必要がある場合は、次を使用します -真実。 ただし、コマンドレットを使用してユーザー名を取得することで、操作が成功したかどうかを確認できます。 Get-ADUserそしてプロパティを指定する パスワードの期限が切れました、図2に示すように。


米。 2. PasswordExpired プロパティを指定した Get-ADUser コマンドレットの結果

結論: PowerShell を使用してユーザーのパスワードをリセットすることは、まったく難しいことではありません。 パスワードのリセットもスナップで簡単にできることは認めます Active Directory ユーザーとコンピュータコンソール Microsoft 管理コンソール (MMC)。しかし PowerShell を使用するタスクを委任する必要がある場合、上記のスナップインを展開したくない場合、または大規模な自動化された IT プロセスの一部としてパスワードをリセットしている場合に適しています。

タスク 2: アカウントをアクティブ化および非アクティブ化する

それでは、アカウントを無効にしてみましょう。 ジャックフロストと協力し続けましょう。 このコードではパラメータを使用します -もしもこれは、コマンドを実行せずにテストするために変更を加える他のコマンドレットで見つけることができます。

PS C:\> Disable-ADAccount jfrost -whatif 状況: ターゲット「CN=Jack Frost、OU=staff、OU=Testing、DC=GLOBOMANTICS、DC=local」に対して操作「Set」を実行しています。

では、実際に無効にしてみましょう。

PS C:\> ADAAccount jfrost を無効にする

そして、アカウントをアクティブ化するときが来たら、どのコマンドレットが役立つでしょうか?

PS C:\>Enable-ADAAccount jfrost

これらのコマンドレットはパイプライン式で使用できるため、必要なだけアカウントをアクティブ化または非アクティブ化できます。 たとえば、このコードは営業部門のすべてのアカウントを非アクティブ化します。

PS C:\> get-aduser -filter "Department -eq "sales"" | アカウントを無効にする

もちろん、次のフィルターを作成します Get-ADUserかなり複雑ですが、ここでパラメータを使用します。 -もしもコマンドレットと一緒に ADアカウントを無効にする助けに来ます。

タスク 3: ユーザー アカウントのロックを解除する

ジャックが新しいパスワードを入力しようとしてアカウントをロックアウトした状況を考えてみましょう。 GUI を使用してアカウントを検索する代わりに、簡単なコマンドを使用してロック解除手順を実行できます。

PS C:\> ADAAccount のロックを解除する jfrost

コマンドレットはパラメーターもサポートしています -もしもそして -確認する.

タスク 4: アカウントを削除する

削除するユーザーの数は関係ありません。コマンドレットを使用すると簡単に削除できます。 削除-ADUser。 Jack Frost を削除したくはありませんが、削除したい場合は、次のようなコードを使用します。

PS C:\> Remove-ADUser jfrost -whatif 状況: ターゲット "CN=Jack Frost,OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local" で操作 "削除" を実行しています。

または、複数のユーザーを入力し、1 つの簡単なコマンドで削除することもできます。

PS C:\> get-aduser -filter "enabled -eq "false"" -property WhenChanged -SearchBase "OU=Employees, DC=Globomantics,DC=Local" | ここで ($_.WhenChanged -le (Get-Date).AddDays(-180)) | 削除-ADuser -whatif

このコマンドは、180 日以上変更されていない無効な従業員 OU アカウントをすべて検索して削除します。

タスク 5: 空のグループを見つける

グループの管理は終わりのない、報われない仕事です。 空のグループを見つける方法はたくさんあります。 組織によっては、一部の式が他の式よりもうまく機能する場合があります。 以下のコードは、組み込みグループを含むドメイン内のすべてのグループを検索します。

PS C:\> get-adgroup -filter * | ここで (-Not ($_ | get-adgroupmember)) | 名前を選択してください

数百のメンバーがいるグループがある場合、このコマンドの使用には時間がかかることがあります。 Get-ADGroupMember各グループをチェックします。 制限やカスタマイズができればもっと良いでしょう。
別のアプローチは次のとおりです。

PS C:\> get-adgroup -filter "members -notlike "*" -AND GroupScope -eq "Universal"" -SearchBase "OU=Groups,OU=Employees,DC=Globomantics, DC=local" | 名前、グループを選択*

このコマンドは、OU グループのメンバーシップを持たないすべてのユニバーサル グループを検索し、いくつかのプロパティを表示します。 結果を図 3 に示します。


米。 3. ユニバーサル グループの検索とフィルタリング

タスク 6: ユーザーをグループに追加する

Jack Frost をシカゴの IT グループに追加しましょう。

PS C:\> add-adgroupmember "chicago IT" -メンバー jfrost

はい、とても簡単です。 数百人のユーザーをグループに簡単に追加することもできますが、これは少し面倒だと思います。

PS C:\> Add-ADGroupMember "シカゴ従業員" -member (get-aduser -filter "city -eq "シカゴ"")

括弧で囲まれたパイプライン式を使用して、シカゴの City プロパティを持つすべてのユーザーを検索しました。 括弧内のコードが実行され、結果のオブジェクトが –Member パラメーターに渡されます。 各ユーザー オブジェクトは Chicago Employees グループに追加されます。 扱うユーザーが 5 人であろうと 5,000 人であろうと、グループ メンバーシップの更新には数秒しかかかりません。 この式は次を使用して書くこともできます。 ForEach-Objectもっと便利なものは何か:

PS C:\> Get-ADUser -filter "city -eq "シカゴ"" | foreach (ADGroupMember "シカゴ従業員" - メンバー $_)

タスク 7: グループ メンバーをリストする

誰が入っているのか知りたいかもしれません あるグループ。 たとえば、Domain Admins グループのメンバーを定期的に確認する必要があります。

PS C:\> Get-ADGroupMember "ドメイン管理者"

図 4 に結果を示します。


米。 4. Domain Admins グループのメンバー

このコマンドレットは、各グループ メンバーの AD オブジェクトを表示します。 ネストされたグループはどうすればよいでしょうか? 私のグループ Chicago All Users は、ネストされたグループのコレクションです。 すべてのアカウントのリストを取得するには、パラメータを使用するだけです –再帰的.

PS C:\> Get-ADGroupMember "シカゴのすべてのユーザー" -Recursive | 識別名の選択

別の方法に進みたい場合、つまりユーザーが所属しているグループを確認するには、ユーザー プロパティを使用します。 メンバーの:

PS C:\> get-aduser jfrost -property Memberof | -ExpandProperty memberOf CN=NewTest,OU=Groups,OU=Employees, DC=GLOBOMANTICS,DC=local CN=Chicago Test,OU=Groups,OU=Employees, DC=GLOBOMANTICS,DC=local CN=Chicago IT,OU= を選択します。グループ、OU=従業員、DC=GLOBOMANTICS、DC=ローカル CN=シカゴセールスユーザー、OU=グループ、OU=従業員、DC=GLOBOMANTICS、DC=ローカル

パラメータを使用しました -ExpandProperty名前を表示するには メンバーの線のように。

タスク 8: 古いコンピュータ アカウントを見つける

「古いコンピュータ アカウントを見つけるにはどうすればよいですか?」という質問をよく受けます。 そして私はいつもこう答えます。「あなたにとって何が時代遅れですか?」 コンピュータ アカウント (ユーザー アカウントでもかまいません) が廃止され、使用できなくなる時期については、企業によってさまざまな定義があります。 私の場合、パスワードが変更されていないアカウントに注意を払っています 一定期間時間。 私の場合、この期間は 90 日です。この期間中にコンピュータがドメインとともにパスワードを変更しなかった場合、コンピュータはオフラインで古い可能性が高くなります。 使用されるコマンドレット Get-ADComputer:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| 名前、パスワードの最終設定を選択してください

このフィルターはハード値を使用するとうまく機能しますが、このコードは、2012 年 1 月 1 日以降パスワードを変更していないすべてのコンピューター アカウントに対して更新されます。 結果を図 5 に示します。


米。 5. 古いコンピュータアカウントを見つける

別のオプション: あなたが少なくとも機能レベルに達していると仮定しましょう Windowsドメイン 2003. プロパティでフィルターする 最終ログオンタイムスタンプ。 この値は、1601 年 1 月 1 日からの 100 ナノ秒間隔の数であり、GMT で保存されるため、この値の操作は少し難しくなります。

PS C:\> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | select name,lastlogontimestamp, @(Name="LastLogon";Expression=(::FromFileTime ($_.Lastlogontimestamp))),passwordlastset | LastLogonTimeStamp の並べ替え


米。 6. LastLogonTimeStamp 値を使い慣れた形式に変換します。

フィルターを作成するには、日付 (たとえば、2012 年 1 月 1 日) を正しい形式に変換する必要があります。 変換は FileTime で実行されます。

PS C:\> $cutoff=(Get-Date "1/1/2012").ToFileTime() PS C:\> $cutoff 129698676000000000

これで、この変数をフィルターで使用して、 Get-ADComputer:

PS C:\> Get-ADComputer -Filter "(lastlogontimestamp -lt $cutoff) -or (lastlogontimestamp -notlike "*")" -property * | 名前、最終ログオンタイムスタンプ、パスワード最終セットを選択します

上記のコードは、図 5 に示されているものと同じコンピューターを検索します。

タスク9: コンピュータアカウントを非アクティブ化する

おそらく、非アクティブなアカウントや古いアカウントを見つけたら、それらを非アクティブ化したくなるでしょう。 これは非常に簡単です。 ユーザー アカウントの操作に使用したものと同じコマンドレットを使用します。 を使用して明確にすることができます サムアカウント名アカウント。

PS C:\> Disable-ADAccount -Identity "chi-srv01$" -whatif 状況: ターゲット "CN=CHI-SRV01, CN=Computers,DC=GLOBOMANTICS,DC=local" で操作 "Set" を実行しています。

または、パイプライン式を使用します。

PS C:\> get-adcomputer "chi-srv01" | ADアカウントを無効にする

コードを使用して古いアカウントを見つけて、それらをすべて非アクティブ化することもできます。

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| ADアカウントを無効にする

タスク 10: タイプ別にコンピューターを検索する

また、サーバーやワークステーションなどの種類ごとにコンピューター アカウントを見つける方法についてもよく質問されます。 これには、ある程度の創造性が必要です。 AD では、おそらく OS を除いて、サーバーとクライアントを区別するものは何もありません。 コンピューターで Windows Server 2008 を実行している場合は、いくつかの追加手順を実行する必要があります。
まず、オペレーティング システムのリストを取得する必要があります。次に、利用可能なオペレーティング システムによってアカウントをフィルタリングします。

PS C:\> Get-ADComputer -Filter * -Properties オペレーティング システム | [オペレーティング システム固有] | [オペレーティング システム固有] を選択します。 オペレーティングシステムの並べ替え

結果を図 7 に示します。


米。 7. OSリストの取得

サーバー OS を実行しているすべてのコンピューターを検索したいと考えています。

PS C:\> Get-ADComputer -Filter "OperatingSystem -like "*Server*"" -properties OperatingSystem,OperatingSystem ServicePack | 名前、操作* | を選択します。 フォーマットリスト

結果を図 8 に示します。

他の AD Get コマンドレットと同様に、必要に応じて検索パラメーターをカスタマイズし、要求を特定の OU に制限できます。 ここで示したすべての式は、より大きな PowerShell 式に統合できます。 たとえば、並べ替え、グループ化、フィルターの適用、CSV へのエクスポート、HTML レポートの作成と電子メール送信などをすべて PowerShell から行うことができます。 この場合、スクリプトを 1 つも記述する必要はありません。
これはボーナスです: ユーザーのパスワードと有効期限のレポートが HTML ファイルに保存されます。

PS C:\> Get-ADUser -Filter "Enabled -eq "True" -AND PasswordNeverExpires -eq "False"" -Properties PasswordLastSet,PasswordNeverExpires,PasswordExpired | Select DistinguishedName,Name,pass*,@(Name="PasswordAge"; Expression=((Get-Date)-$_.PasswordLastSet)) |sort PasswordAge -Descending |sort ConvertTo-Html -Title "パスワード有効期間レポート" | Out-File c:\Work\pwage.htm !}

この式は少し怖く見えるかもしれませんが、PowerShell に関する最小限の知識があれば簡単に使用できます。 そして残るのは 最後のヒント: というカスタム プロパティを定義する方法 パスワード年齢。 この値は、今日と PasswordLastSet プロパティの間のギャップを表します。 次に、新しいプロパティの結果を並べ替えます。 図 9 は、私の小さなテスト ドメインの出力を示しています。

更新:
投稿にはポータルの記事の翻訳が含まれています

今日は、すべてのユーザーのリストをアップロードしてみます。 別ファイル Active Directoryから。 この問題における主なアシスタントは PowerShell です。 問題は、マイクロソフトが当初計画していたということです コマンドコンソール Windows サーバー コンポーネントを管理するための主要なツールとしての PowerShell。 そして、すでにバージョン 2.0 が存在する今日、概して、これは当てはまります。

最近でも、管理者は何らかの方法で AD と対話するために、dsquery ユーティリティまたはさまざまな種類のスクリプトやユーティリティを自由に使用できる必要がありました。 現在、Windows Server 2008 R2 以降、PowerShell を通じて AD を操作できるようになりました。 PowerShell 2.0 の出現により、Active Directory と対話するために特別なモジュールが使用されます。 Windows PowerShell 用 Active Directory モジュール、 を含む 必要なリストコマンドレット。 タスクには次のコマンドを使用します Get-ADUser.

したがって、PowerShell コンソールを実行するオペレーティング システムに応じて、「準備手順」を実行する必要があります。

1) Windows Server で作業している場合 バージョン2012まで次に、次のコマンドを実行する必要があります。

  • インポートモジュールのアクティブディレクトリ – モジュールを AD にインポートするコマンド

2012 以降のオペレーティング システム バージョンでは、このモジュールはデフォルトですでに有効になっています。

2) クライアント Windows から作業する場合は、Windows PowerShell コンポーネント用の Active Directory モジュールがインストールされた状態で、RSAT リモート管理パッケージをクライアント Windows にインストールする必要があります。

アップロードされるデータの量が最大 1000 ユーザーの場合は、Get-ADUser コマンドレットを実行することをお勧めします。

PowerShell を使用して AD ユーザーを別のファイルにエクスポートする

まず、Get-ADUser コマンドのヘルプを呼び出してみましょう。 その結果、さらなる管理に必要なコマンドをすべて受け取ることができます。

  • ヘルプ Get-ADUser – ヘルプを呼び出すコマンド

PowerShell ウィンドウですべてのプロパティを持つすべてのユーザーのリストを取得するには、次のコマンドを実行する必要があります。

  • Get-ADUser -filter * – AD ユーザーのリストをエクスポートする

このアップロードは完全に情報を提供するものではなく、ウィンドウに必要な情報がすべて収まりません。 したがって、検索を絞り込んで、user1 という名前の特定のユーザーのプロパティを表示してみましょう。

  • Get-ADUser -identity user1 -properties * – 特定のユーザーのプロパティをエクスポートする

次に、すべてのユーザーのリストとそのプロパティを外部にエクスポートしてみましょう。 txtまたはcsvファイル:

  • Get-ADUser -filter * -properties * | Export-csv -path c:\users.csv -encoding Unicode – ユーザーを別のファイルにエクスポートする

描きたいです 特別な注意鍵の上に -Unicode のエンコード。 これは、AD からエクスポートした後、アップロードされたファイルでロシア語のキリル文字が正しく表示されるようにするために役立ちます。 たとえば、Microsoft Excel では、ロシア語の文字の代わりに疑問符が表示されます。

ファイルを表示すると、データは 1 行でエクスポートされるため、読み取ることができません。 これを変更するには、次のことを行う必要があります。

PowerShell の最初のバージョン以来、Microsoft がそれを Windows の主要な管理ツールにしようとしてきたのは周知の事実です。 そして多くの点でそれはうまくいきます! 今日は 簡単な例を取得するために使用できる PowerShell の機能を紹介します。 さまざまな情報 Active Directory ユーザーとその属性について説明します。

注記。 以前は、AD ユーザー アカウントの属性に関する情報を取得するには、ADUC コンソール (含む)、ユーティリティなどのさまざまなツールを使用する必要がありました。 ツールの選択は通常、当面のタスクと管理者のプログラミング能力に基づいて行われます。

PowerShell 2.0 では、Active Directory を操作するための特別なモジュール (Windows Server 2008 R2 で導入) が導入されており、そのコマンドレットを使用すると、AD ディレクトリ オブジェクトでさまざまな操作を実行できます。 このコマンドレットは、Active Directory ドメイン ユーザーとそのプロパティに関する情報を取得するために使用されます。 Get-ADUser。 Get-ADUser コマンドレットを使用すると、AD の既存のユーザー アカウントの属性の値を取得できます。 さらに、さまざまな選択基準を指定して、ドメイン ユーザーとその属性のリストを生成できます。

この例では、PowerShell Get-ADUser コマンドレットを使用して、ユーザーのパスワードが最後に変更されたときとその有効期限が切れたときに関する情報を取得する方法を示します。

管理者権限で Powershll ウィンドウを起動し、次のコマンドを使用して Active Directory モジュールをインポートします。

インポートモジュールのアクティブディレクトリ

アドバイス。 Windows Server 2012 以降では、PowerShell Active Directory モジュールがデフォルトで有効になっているため、この項目をスキップできます。

クライアント オペレーティング システム (Windows 10 など) で Get-AdUser コマンダーが機能するには、適切なバージョンの RSAT をインストールし、コントロール パネルでコンポーネントを有効にする必要があります。 Windows PowerShell 用 Active Directory モジュール(リモート サーバー管理ツール -> 役割管理ツール -> AD DS および AD LDS ツール -> AD DS ツール)。

すべての Get-ADUser コマンドレット引数の完全なリストは、次のようにして取得できます。

ヘルプ Get-ADUser

すべてのドメイン アカウントのリストを表示するには、次のコマンドを実行します。

Get-ADUser -filter *

返されるリストの形式はあまり使いにくいです。ユーザー アカウントの 120 以上の属性とプロパティのうち、基本的な 10 個だけが表示されます (DN、SamAccountName、名前、UPN など)。さらに、次のようなものがあることがわかります。最後にパスワードが変更された時刻に関する情報はありません。

退会するには 情報がいっぱいユーザー tuser の使用可能なすべての属性については、次のコマンドを実行します。

Get-ADUser -identity tuser -properties *

したがって、ユーザー アカウントに関連付けられた AD ユーザー属性とその値の完全なリストが表示されます。 次に、必要なフィールドが表示されるように、Get-ADUser コマンドレットの出力の書式設定に進みます。 私たちは次の属性に興味があります。

  • パスワードの期限が切れました
  • パスワード最終設定
  • パスワードは期限切れにならない

コマンドを実行しましょう:

Get-ADUser tuser -properties PasswordExpired、PasswordLastSet、PasswordNeverExpires

これで、ユーザー データには、パスワードの変更日と有効期限が切れる時刻に関する情報が含まれます。 情報をより便利な表形式で表示してみましょう。

Get-ADUser -filter * -properties PasswordExpired、PasswordLastSet、PasswordNeverExpires | ft 名前、PasswordExpired、PasswordLastSet、PasswordNeverExpires

特定の OU からのユーザー データを表示するには、パラメータを使用します サーチベース:

Get-ADUser -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -filter * -properties PasswordExpired、PasswordLastSet、PasswordNeverExpires | ft 名前、PasswordExpired、PasswordLastSet、PasswordNeverExpires

コマンドの結果はテキスト ファイルにエクスポートできます。

Get-ADUser -filter * -properties PasswordExpired、PasswordLastSet、PasswordNeverExpires | ft 名前、PasswordExpired、PasswordLastSet、PasswordNeverExpires > C:\temp\users.txt

または CSV 形式で、将来 Excel に簡単にエクスポートできるようになります (追加で使用します)。 ソートオブジェクト PasswordLastSet 列でテーブルを並べ替え、条件も追加してみましょう。 どこ– ユーザー名には文字列「Dmitry」が含まれている必要があります):

Get-ADUser -filter * -properties PasswordExpired、PasswordLastSet、PasswordNeverExpires | ここで ($_.name –like “*Dmitry*”) | 並べ替えオブジェクトの PasswordLastSet | select-object Name、PasswordExpired、PasswordLastSet、PasswordNeverExpires | エクスポート csv -path c:\temp\user-password-expires-2015.csv

したがって、必要な Active Directory ユーザー属性を含むテーブルを作成できます。

特定の特性に基づいて AD ユーザー アカウントのリストを取得するには、-Filter パラメーターを使用します。 このパラメーターの引数として、特定の Active Directory ユーザー属性の値を指定できます。これにより、フィルター基準に一致するユーザーに Get-ADUser コマンドレットが適用されます。

名前が Roman で始まる AD ユーザーの出力:

Get-ADUser -filter (「Roman*」のような名前)

Get-ADUser -Filter (SamAccountName -like "*") | 測定対象

AD 内のすべてのアクティブな (ブロックされていない) アカウントのリスト:

Get-ADUser -Filter (有効 -eq "True") | オブジェクトの選択 SamAccountName,Name,Surname,GivenName | フォーマットテーブル

アカウントのリスト 期限切れパスワードアクション:

Get-ADUser -filter (Enabled -eq $True) -propertiespasswordExpired | ここで($_.パスワード期限切れ)

電子メール アドレスを持つアクティブなアカウントのリスト:

Get-ADUser -Filter ((mail -ne "null") -and (Enabled -eq "true")) -Properties Surname,GivenName,mail | オブジェクト名、姓、名、メールを選択 | フォーマットテーブル

タスク: に保存されているアカウントのリストについては、 テキストファイル(1 行に 1 つのアカウント) AD でユーザーの電話番号を取得し、その情報をテキスト CSV ファイルにアップロードする必要があります (Esxel に簡単にインポートできます)。

インポート Csv c:\ps\usernsme_list.csv | ForEach ( Get-ADUser -identity $_.user -Properties Name, TelephoneNumber | Select Name, TelephoneNumber | Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8 )

次の例では、ダウンロードできます 住所録 enterprise を csv ファイルとして保存し、後で Outlook または Mozilla Thunderbird にインポートできます。

Get-ADUser -Filter ((mail -ne "null") -and (Enabled -eq "true")) -Properties Surname,GivenName,mail | オブジェクト名、姓、名、メールを選択 | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $env:temp\mail_list.csv

過去 90 日間パスワードを変更していないユーザー:

$90_Days = (Get-Date).adddays(-90) Get-ADUser -filter ((passwordlastset -le $90_days))

$user = Get-ADUser winadmin -Properties summnailPhoto $user.thumbnailPhoto | $user = Get-ADUser winadmin -Properties Set-Content winadmin.jpg -エンコーディングバイト

ユーザーアカウントが所属するグループのリスト

Get-AdUser winadmin -Properties memberof | memberof -expandproperty memberof を選択します