現在、私たちのドメインに参加しているコンピュータのリストを取得し、作成したAccessデータベースに存在するかどうかを確認するために一度に1つずつ繰り返しますWMIクエリを実行してシステム情報を収集し、そのデータがDBに追加されていない場合は追加します。私は正常にコンピュータのほとんど(半分近く)で行うことができますが、彼らのいくつかは、RPCサーバーが見つかりませんでした。Get-WmiObjectがforeachループで正しく機能していない
これらのエラーの一部は、コンピュータがオフラインになっていることが原因であることがわかりました(ファイアウォールは無効で、WMIクエリが有効です)。問題は、一部のコンピュータがオンラインで、スクリプト内でGet-WmiObject
コマンドを実行したときにRPCサーバーエラーが発生することです。ただし、スクリプト外でコマンドを実行すると、情報を正常に照会できます。私は奇妙な振る舞いを引き起こしている機能を掲示しており、プログラミングの知識が豊富な人が私が作り上げている間違いを見つけ出すことを望んでいました。
第2の問題は、最初の反復の後、空白を言うエラーが次のようになるCompName
フィールド?最初の2回の反復は期待どおりに機能し、「コンピュータはすでに存在しています」というエラーが発生します。
function Update-Systems {
$PSCredential = Get-Credential
$Comp = (Get-ADComputer -Filter * | select -ExpandProperty Name)
foreach ($Computer in $Comp) {
$RecordSet.MoveFirst()
$RecordSet.Find("CompName = '$Computer'")
$RecordCheck = $RecordSet.Fields.Item("CompName").Value
if (!$RecordCheck) {
"Collecting Data for $Record"
$SystemProp = Get-WmiObject -Class Win32_ComputerSystem -Credential $PSCredential -ComputerName: $Computer -ErrorAction SilentlyContinue
$RecordSet.Addnew()
$RecordSet.Fields.Item("DateRan") = Get-Date
$RecordSet.Fields.Item("Domain") = $SystemProp.Domain
$RecordSet.Fields.Item("CompName") = $SystemProp.Name
$RecordSet.Fields.Item("Model") = $SystemProp.Model
$RecordSet.Fields.Item("Manufacturer") = $SystemProp.Manufacturer
$RecordSet.Update()
} else {
"Computer already exists"
}
}
}
コードの画像は掲載しません。 – TrevorBrooks
あなたの質問をテキストとして含むように質問します。 – LotPings
@TrevorBrooksこれについて申し訳ありませんが、これは私の初めてのStackOverflowへの投稿です。あなたがそれをコピーできない場合、コードはあまり役に立ちません..... – lashing