ドメイン内のコンピューターのインベントリ。 怠azineは進歩のエンジン

どなたでも歓迎します。

最近、上司から、ドメイン内のコンピューターの構成に関する情報を収集する問題について考えるように依頼されました。 最初は、メモリプロセッサとハードドライブのみに関するリクエストでした。 最初に考えたのは、部門を調べて、しばらくの間コンピューターを解放することです。 1台のコンピューターの場合、難しいことではありませんが、1,500台あれば問題ありません。



最初に、ドメイン内のすべてのコンピューターのリストを抽出する必要がありました。 この例では、私のドメインはTest.lanです。 リスト全体をAllComputers.csvファイルにインポートします。

これを行うには、PSのBPモジュールを追加することを忘れないでください。 私の職場では、プロファイルに登録されています。同じことを行うことをお勧めします。



import-module activedirectory

get-ADcomputer -Filter * |

Where-Object {$a=$_.name; $_.DistinguishedName -ne "CN=$a,OU=Disable,DC=Test,DC=lan"} |

Sort-Object name | Select-Object name | Export-csv C:\Invent\AllComputers.csv -NoTypeInformation









ここでは、私のドメインには、切断されたすべてのコンピューターのアカウントが置かれているDisableフォルダーがあることを説明する必要があります。 それらが無効になっている場合、それらをノックするポイントは何ですか。 したがって、このフォルダーを検索から除外します。



ドメイン内のすべてのコンピューターの電源がオンになっている、動作している、または場所さえあるわけではないことは誰もが理解しています。 したがって、検証に進む前に、それとの接続を確認します。 もちろん、100台のコンピューターがある場合、これを行うことはできません。 また、2000台のコンピューターを使用している場合、約800台のコンピューターの電源がオフになっているため時間を無駄にすると、多くの時間が消費されます。 また、アクセスできないコンピューターをすぐに思い出す価値があります。 彼らのドアをノックする理由もありません。



import-csv c:\Invent\AllComputers.csv | foreach {

$a=$_.name

if ((Test-connection $a -count 2 -quiet) -eq "True")

{

if ((Get-WmiObject -computername $a Win32_OperatingSystem) -eq $null)

{









多くの人が反対するかもしれません

「なぜこんなに難しいの? 最初にリストを作成してからインポートする理由。 すぐに簡単になりませんか?」

簡単です。 しかし、目の前にコンピューターのリストがあるといいですね。 さらに、リストには番号が付けられます。 また、HELLに何台のコンピューターがあるかを常に把握しています。



接続テストでは、コマンドレットTest-connectionに-quietパラメーターを選択しました。これにより、異なる情報を含む行は取得せず、答えはTrueまたはFalseになります。 リクエストの数を2から4に減らすにはどうしますか。

WMI要求でコンピューターをノックし、そのようなアクションに対する権限がない場合、エラーのある赤い線が大量に表示されます。 そのため、トライアルWMI要求でそのようなコンピューターをすぐに除外します



WMIオブジェクトを取得すると、情報(おそらくほとんどすべて)を見つけることができます。PSを使用すると、これを簡単に行うことができます。 そこで、私はすぐに必要なWMIオブジェクトを探しました。

ここでは、すべてのクラスとその属性を見ることができます。

コンピューターがネットワーク上にあり、アクセスできることを確認した後、その内部を確認します。



Write-Host " " -ForeGroundColor Green $a

"" | out-file c:\Invent\Comp\$a.txt

Get-WmiObject -computername $a Win32_OperatingSystem |

select-object csname, caption, Serialnumber, csdVersion |

ft @{Label=" "; Expression={$_.CSname}},

@{label=""; Expression={$_.caption}},

@{label=""; Expression={$_.csdVersion}},

@{label=" "; Expression={$_.SerialNumber}} -auto -wrap |

out-file c:\Invent\Comp\$a.txt -append

Get-WmiObject -computername $a Win32_ComputerSystemProduct | select-object UUID |

ft UUID -autosize | out-file c:\Invent\Comp\$a.txt -append

"" | out-file c:\Invent\Comp\$a.txt -append

Get-WmiObject -computername $a Win32_Processor | select-object name, SocketDesignation, Description |

ft @{label=""; Expression={$_.name}},

@{label=""; Expression={$_.SocketDesignation}},

@{label=""; Expression={$_.Description}} -auto -wrap | out-file c:\Invent\Comp\$a.txt -append

" " | out-file c:\Invent\Comp\$a.txt -append

Get-WmiObject -computername $a Win32_BaseBoard | select-object Manufacturer, Product, SerialNumber |

ft @{label=""; Expression={$_.manufacturer}},

@{label=""; Expression={$_.Product}},

@{label=" "; Expression={$_.SerialNumber}} -auto -wrap |

out-file c:\Invent\Comp\$a.txt -append

" " | out-file c:\Invent\Comp\$a.txt -append

Get-WmiObject -computername $a Win32_DiskDrive | select-object Model, Partitions, Size, interfacetype |

ft @{Label=""; Expression={$_.Model}},

@{Label=" "; Expression={$_.Partitions}},

@{Label=" ()"; Expression={($_.Size/1GB).tostring("F00")}},

@{Label=""; Expression={$_.interfaceType}} -auto -wrap |

out-file c:\Invent\Comp\$a.txt -append

" " | out-file c:\Invent\Comp\$a.txt -append

Get-WmiObject -computername $a Win32_LogicalDisk -Filter "DriveType=3" | select-object DeviceID, FileSystem, Size, FreeSpace |

ft @{Label=""; Expression={$_.DeviceID}},

@{Label=" "; Expression={$_.FileSystem}},

@{Label=" ()"; Expression={($_.Size/1GB).tostring("F00")}},

@{Label=" ()"; Expression={($_.FreeSpace/1GB).tostring("F00")}} -auto -wrap |

out-file c:\Invent\Comp\$a.txt -append

" " | out-file c:\Invent\Comp\$a.txt -append

Get-WmiObject -computername $a Win32_Physicalmemory | Select-Object capacity, DeviceLocator |

ft @{Label=" ()"; Expression={($_.capacity/1MB).tostring("F00")}},

@{Label=""; Expression={$_.DeviceLocator}} -auto -wrap |

out-file c:\Invent\Comp\$a.txt -append

"" | out-file c:\Invent\Comp\$a.txt -append

Get-WmiObject -computername $a Win32_videoController |

Select-Object name, AdapterRAM, VideoProcessor |

ft @{Label=""; Expression={$_.name}},

@{Label=" ()"; Expression={($_.AdapterRAM/1MB).tostring("F00")}},

@{Label=""; Expression={$_.VideoProcessor}} -auto -wrap |

out-file c:\Invent\Comp\$a.txt -append

" " | out-file c:\Invent\Comp\$a.txt -append

$OS=Get-WmiObject -computername $a Win32_OperatingSystem | foreach {$_.caption}

if ($OS -eq "Microsoft Windows 2000 Professional")

{

Get-WmiObject -computername $a Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=True" |

Select-Object caption,MACaddress |

ft @{Label=""; Expression={$_.caption}},

@{Label="MAC "; Expression={$_.MACAddress}} -auto -wrap |

out-file c:\Invent\Comp\$a.txt -append

}

else

{

Get-WmiObject -computername $a Win32_NetworkAdapter -Filter "NetConnectionStatus>0" |

Select-Object name, AdapterType, MACAddress |

ft @{Label=""; Expression={$_.name}},

@{Label="MAC "; Expression={$_.MACAddress}},

@{Label=""; Expression={$_.AdapterType}} -auto -wrap |

out-file c:\Invent\Comp\$a.txt -append

}

}









コンピューターに関するすべての情報はテキストファイルに分類されます。

2点で停止する価値があります。

最初に、私Write-Host " " -ForeGroundColor Green $a



を自分専用に作成しました。これは、PowerShellが現在何をしているのかを知ることができるからです。

第二に、ネットワークカードをチェックする前にOSをチェックするのはなぜですか。

残念ながら、Windows 2000はWin32_NetworkAdapter要求に応答しないため、Win32_NetworkAdapterConfiguration要求を適用します。 最後だけを残してみませんか? そのままでもかまいませんが、Win32_NetworkAdapterは、アナログのみのキャプションの場合、Nameなどの属性を生成します。 些細なことですが、素晴らしい。

また、ネットワークカードを確認するときに操作性を確認することもできます。確認しないと、現時点で興味のないカードがさらにいくつか表示されます。 これが必要ですか?



それは基本的にそれです。

スクリプトは必要に応じて変更できます。

だから今、ボスはコンピューターの在庫であなたを怖がらせることはほとんどありません。



All Articles