2017-02-23 3 views
0

テキストファイルの資産タグのリストとADのコンピュータ名を比較し、説明を生成するスクリプトを作成しようとしています。それをCSVにエクスポートすると後で表示されます。現在のところ、コードは動作しますが、次のエラーメッセージが表示されます。 ADのコンピュータはLかDのどちらかで始まりますが、それはラップトップかデスクトップかを示しますが、受け取るリストにはLまたはDが含まれていないため、 "L" + "D"前面に。これを行うより良い方法はありますか?PowerShell Active Directoryテキストファイルと比較します。

コード:

Import-Module ActiveDirectory 

     foreach ($line in Get-Content ComputerNames.txt) { 
      if($line -match $regex) { 
       $laptop = "L" + $line 
       $desktop = "D" + $line 
       get-ADComputer $laptop -Properties * |select Description 
       #get-ADComputer $desktop -Properties * |select Description -ErrorAction Ignore   } 

} 

エラー:

get-ADComputer : Cannot find an object with identity: 'LD7MWQ12' under: 'DC=ap,DC=o-i,DC=intra'. 
At line:9 char:9 
+   get-ADComputer $laptop -Properties * |select Description 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (LD7MWQ12:ADComputer) [Get-ADComputer], ADIdentityNotFoundException 
    + FullyQualifiedErrorId : Cannot find an object with identity: 'LD7MWQ12' under: 'DC=ap,DC=o-i,DC=intra'.,Microsoft.ActiveDirectory.Management.Com 
    mands.GetADComputer 
+0

そのオブジェクトが手動でチェックされていれば、単にオブジェクト "LD7MWQ12"を見つけられませんか? –

+0

資産D7MWQ12は実際にD(フルネームDD7MWQ12)で始まるため、存在しません。エラーメッセージを無視する方法がありますか、それともバイパスして文字DまたはLで始まるアセットを検索するのでしょうか? – ilovetaufu

+0

エラーを回避するには、使用することができますhttp://stackoverflow.com/questions/8388650/powershell-how-can-i-stop-errors-from-being-displayed-in-a-script –

答えて

1
おそらく

これを行うには、より効率的な方法しかし、以下の作品:すべての行のために

Import-Module ActiveDirectory 

    foreach ($line in Get-Content ComputerNames.txt) { 
     Get-ADComputer -Filter * -Property Description | Where {$_.samaccountname -Like "*$line"} | select Description 
    } 

computernames.txtオブジェクトは、$line変数のようなADオブジェクトを見つけて、そのオブジェクトの説明を選択します。

+0

ありがとうLachie!それは今働きます! – ilovetaufu

0

低速ビットはADへのネットワークリンクになるでしょう。可能。あなたがADに膨大な数のコンピュータを持っていない限り、すべてのコンピュータをプルダウンし、それらをテキストファイルと比較してローカルに比較する方が良いでしょう。また

あなたはADから情報を引っ張っている場合、あなたが必要とするよりも、それ以上を持っていない、ネットワークトラフィックとメモリのオーバーヘッドが無駄になっているので、代わりにプロパティの*、単に説明に追加

Import-Module ActiveDirectory 

# AD query which will get all computers with names starting D or L 
$ADFilter = "Name -like 'D*' -or Name -like 'L*'" 
$ADComputers = Get-ADComputer -filter $ADFilter -Properties Description | Select Name, Description 

$NamesFromFile = Get-Content ComputerNames.Txt 

# Filter the AD Computers where the name without the first character is 
# mentioned in the file 
$ADComputers | Where-Object { $_.Name.SubString(1) -in $NamesFromFile } | Export-Csv -NoTypeInformation out.csv 
関連する問題