PowerShellを使用してActive Directoryコンピューターレポートを作成します。アクティブディレクトリ(AD)コンピューターオブジェクトとそれらのプロパティに関する情報を見つけるには、主にGet-ADComputer cmdletを使用します。例えば、アクティブディレクトリのドメインで、Get-ADComputer PowerShell cmdletを使用して、コンピューターアカウントオブジェクト(サーバーおよびワークステーション)に関する情報を取得できます。このcmdletは、さまざまな基準でADコンピューターを検索するための最も有用なものの1つです。
この記事では、Get-ADComputer cmdletの多くの用途と、それを包括的かつ有益なレポートに変える方法について説明します。
記事ブログ「PowerShellを使用してActive Directoryコンピューターレポートを作成する」から始めましょう。
アクティブディレクトリ PowerShell モジュールのインストール方法とインポートについてもお読みください。
PowerShell でアクティブディレクトリコンピューターレポートを作成する
前提条件
この記事の例のスクリプトに従いたい場合は、以下を準備してください。
- 少なくとも1つのドメイン参加ワークステーションを備えたAD環境。
- ドメイン機能レベル – Windows Server 2016。
- アクティブディレクトリ用のリモートサーバー管理ツール(RSAT)をドメイン参加ワークステーションにインストールしてください。
- 最新のPowerShellバージョン、または少なくともPowerShell 7.x以上が、スクリプトを実行するために必要です。
では、PowerShellでActive Directoryコンピューターレポートを作成する方法は?見てみましょう。
Get-ADComputer Powershellコマンドの理解
始める前に、Get-ADComputerコマンドについて理解しておく必要があります。Active Directoryから情報を取得するために、ドメイン管理者特権は必要ありません。一般ユーザーアカウントがActive Directoryから情報を取得するために、ドメインユーザーまたは認証済みユーザーグループのメンバーであることが十分です。
まあ、通常のGet-Helpコマンドは、Get-ADComputerコマンドレットの他のすべてのパラメータのリストを提供します:
$command = Get-ADComputer
Get-Help $command
サンプル出力:
または、Get-ADComputerコマンドの公式ドキュメントにアクセスできますこちら。
特定のコンピューターアカウントに関する情報を取得するには、その名前を引数として-Identityパラメーターを使用します。
Get-ADComputer -Identity DC01
以下はサンプル出力です:
DistinguishedName : CN=DC01,OU=Servers,OU=DC,OU=IT,DC=infrasos,DC=com
DNSHostName : DC01.infrasos.com
Enabled : True
Name : DC01
ObjectClass : computer
ObjectGUID : 87654321-1204-5578-0000-123462341264
SamAccountName : DC01
SID : S-1-5-21-123656780-1234667890-0986654321-1264
その結果、Get-ADComputer cmdlet は、ADからのコンピューターオブジェクトの基本的なプロパティのみを返します。ただし、上記のコマンドを実行すると、コンピューターオブジェクトに関するトップレベルの情報のみが提供されます。次に、オブジェクトの利用可能なプロパティを詳細に表示したい場合は、-Properties パラメーターを使用できます。
オブジェクトのすべてのプロパティをリストするには、-Properties パラメーターを追加し、アスタリスク(*)の値を追加します。アスタリスクの値は、ALLを示すワイルドカード値です:
Get-ADComputer -Identity DC01 -Properties *
サンプル出力:
一方、Active Directory ユーザーおよびコンピューター コンソール(または dsa.msc)内をナビゲートし、そこからプロパティを表示できます。最後に、コンピューターオブジェクトを選択して、属性エディター タブに移動して、コンピューターオブジェクトのプロパティのリストを表示します。
また、PowerShell で Active Directory ログオンレポートを作成する方法を参照してください。
Get-ADComputer の結果をフィルタリング
欠点の1つは、必要ない情報を表示する可能性があることです。 PowerShell パイプラインを使用すると、 Get-ADComputer cmdlet を使用して、コマンドラインで特定のコンピュータのプロパティを表示できます。 たとえば、 Name と LastLogonDate プロパティの値だけを出力に残すことができます。 Format-Table コマンドをメイン構文にパイプすることで、次のようにします。
Get-ADComputer -Identity DC01 -Properties * | Format-Table Name, LastLogonDate -Autosize
サンプル出力:
ここでは、Windows PowerShell は、実際に表示されるデータに基づいて列の幅を計算します。 AutoSize パラメータを指定すると、 Format-Table コマンドを実行するときに、このパラメータがすべての列を読みやすくします。
ただし、前のコマンドは単一のADコンピューターオブジェクトのみを検索します。したがって、ドメイン内のすべてのコンピューターの情報が必要な場合は、 Identity パラメータを Filter:
Get-ADComputer -Filter * -Properties * | Format-Table Name, Created -Autosize
サンプル出力を参照してください。
コンピューター名とオブジェクト作成日のみを含むシンプルなフォーマットされたテーブルが得られました。このテーブルにADのコンピューターオブジェクトの他の列を追加するには、パイプラインのFormat-Table セクションにプロパティを追加します。
基本的に、特定の組織単位(OU)内のコンピューターオブジェクトの情報を取得するには、–SearchBase パラメーターを使用できます。
Get-ADComputer -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Filter * -Properties * | Format-Table Name, Created -Autosize
そのうえ、Sort-Object コマンドレットをパイプラインに挿入することで、クエリ結果をソートすることもできます:
Get-ADComputer -Filter * -Properties * | Sort-Object Created | Format-Table Name, Created -Autosize
上記のコマンドでは、Sort-ObjectコマンドがGet-ADComputerの結果をCreatedで最初にソートし、それをFormat-Tableに渡して表示します。
Get-ADComputer で検索フィルターを使用する
私たちは、Get-ADComputerコマンドレットの-Filter引数を使用して、特定の基準に基づいて複数のADコンピューターを検索します。前述のように、この場合、ワイルドカードと論理比較演算子を使用できます。確かに、フィルターとして、私たちは主なコンピューターオブジェクト属性のみを使用できます。
同様に、拡張コンピュータ属性に対する検索フィルターを使用する必要がある場合は、Where-Object パイプを使用します。次の例は、Get-ADComputerコマンドレットを使用してドメイン内のコンピュータオブジェクトを照会および検索する方法のより実践的な例です。
Active Directory内のすべてのアクティブでブロックされていないコンピュータの総数を取得します:
複数のフィルターを同時に使用してコンピュータを検索します。これを実現するには、PowerShell 論理比較演算子を使用します。
(Get-ADComputer -Filter {Enabled -eq "true"}).Count
ADドメイン内のすべてのWindows Serverホストを表示します:
Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*' }
特定のOU内の名前がDCで始まるすべてのコンピュータのリストを取得します:
Get-ADComputer -Filter {Name -like "DC*"} -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Properties * | Format-Table Name
OU内を検索する際、ルートOUのみに検索を限定するためにSearchScope1パラメータを使用できます。-SearchScope2オプションは、すべてのOU内のコンピューターに対して再帰的な検索を実行します。
Get-ADComputerで複数のコンピューターを管理する
特定のアクションを結果のリスト内のすべてのコンピューターに対して実行するために、Foreach-Objectループを使用する必要があります。この例では、Windows Management InstrumentationまたはCommon Information Classesを使用して、リモートで複数のADコンピューターを照会できます。
Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Foreach-Object {
Get-CimInstance Win32_Bios -ComputerName $_.Name -ErrorAction SilentlyContinue |
Select-Object PSComputerName
}
明らかに、この例では、ドメイン内のWindows Serverホストのリストと、それらのモデルとメーカーを取得したい場合、同じループ方法を使用してコンピューターのプロパティを取得します。
$Computers = Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*'}
Foreach ($Computer in $Computers){
$Hostname = $Computer.Name
$ComputerInfo = (Get-WmiObject -Computername $Hostname Win32_ComputerSystem)
$Manufacturer = $Computer.Manufacturer
$Model = $Computer.Model
Write-Output "Name: $Hostname"
Write-Output "Manufacturer: $Manufacturer"
Write-Output "Model: $Model"
Write-Output " "
}
それで、上記の例から取得した情報は、これらのコンピュータがADの一部であるため、ドメインサービスを介してすぐに利用可能です。ただし、すべてのコンピュータがドメインにプロパティを公開しているわけではありません。どうやってそれらを取得できますか?
次に、Invoke-Commandを使用します。このPowerShellコマンドレットは、リモートコンピュータでローカルコマンドを実行します。たとえば、特定のOU内のすべてのコンピュータで特定のコマンドを実行する必要があるとします。この例では、Invoke-Commandを使用して、すべてのサーバーでグループポリシーの更新コマンドを実行します:
Get-ADComputer -SearchBase "OU=DC,DC=infrasos,DC=com" -Filter * |
%{ Invoke-Command -Computer $_.Name -ScriptBlock { gpupdate /force } }
Get-ADComputerでPowerShellADレポートを生成する
WindowsPowerShellでは、コマンドの出力を複数のレポート形式にエクスポートします。以下にいくつかの例を示します。
まず、Get-ADComputerコマンドの結果をテキストファイルにエクスポートします:
Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2019*' } -Properties * |
Select Name, OperatingSystem |
Format-Table -AutoSize C:\Temp\2019_servers.txt
第二に、また、すべてのコンピュータのリストを取得し、カンマ区切り値(CSV)ファイルにエクスポートします:
Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Export-CSV All-Computers.csv -NoTypeInformation
第三に、レポートをエクスポートして、すべてのコンピュータと重要なプロパティのリストを含むHTMLウェブページ形式を取得することもできます:
Get-ADComputer -Filter * -Properties * |
Select-Object Name,OperatingSystem |
ConvertTo-Html |
Out-File C:\ps\ad_all_computers.html
このようになります:
PowerShellでActive Directoryコンピュータレポートを作成することを読んでいただき、ありがとうございます。結論に達します。
さらに読むAzure AD監視の展開
PowerShellを使用したActive Directoryコンピュータレポートの作成の結論
この記事では、Get-ADComputerコマンドについて徹底的に説明しました。このコマンドで、特定のマシンの詳細なプロパティと情報のリストを取得できることを学びました。さらに、包括的なリストで、必要な情報のみを取得するためにこれらのプロパティをフィルタリングする方法を学びました。
Source:
https://infrasos.com/create-active-directory-computer-reports-with-powershell/