2017-05-08 16 views
0

問題:Sapien Powershell Studioで次のコードを使用すると、コンピュータ名が正しく返されますが、コンピュータの説明は1行として返されます。言い換えれば、すべてのコンピュータ記述は分離されておらず、1つの長いリストとして現れる。リストボックスのforeachループ

Out-Stringが削除された場合は、1つのコンピュータの説明のみが返されます。

私はテキストボックスに出力する際に​​は、以前は基本的に同じコードを使用していましたが、問題はありませんでした。

$searchbutton_Click={ 
#TODO: Place custom script here 

$computerlist.Items.clear() 

$username = "*" + $searchbox.text + "*" 

$computers = Get-ADComputer -Filter { Description -like $username } - 
Properties description | select -expand name 

foreach ($computer in $computers) 
{ 
    $compdescription = (Get-ADComputer -Filter { Description -like $username 
    } -Properties description).description | out-string 

    $results = New-Object System.Windows.Forms.listviewitem($computer) 

    $results.subitems.add($compdescription) 

    $computerlist.Items.Add($results) 



} 

} 
+0

でより多くのは一度だけコンピュータオブジェクトを取得し、これは二倍の速さになる参照: 'ゲット-ADComputer -Filter {$ユーザ名様説明}説明を-Properties | ForEach {$ Results = New-Object System.Windows.Forms.listviewitem($ _。Name); $ results.subitems.add($ _。Description); $ computerlist.Items.Add($ results)} 'それは置き換えることができますあなたの '$ username ='行を越えて、最後の '}'を除くすべての行。 – TheMadTechnician

答えて

0

2つのことが間違っています。

(1)Get-ADComputerに対して同じクエリを2回使用しています。どうして?私は次のようなものになるはずです。そうでない場合は、すべてのコンピュータの説明の$ compdescription値に格納します。

(Get-ADComputer -Filter { name -like $computer 
    } -Properties description).description 

(2)すべての説明で大きな文字列を返す際の質問について。ドキュメントから:デフォルトで

、アウト文字列は、文字列を蓄積し、 単一の文字列として返しますが、あなたは一度に1つの文字列を返すためにアウト文字列 を指示するために、ストリームのパラメータを使用することができます。

MSDN

+0

恐ろしい! Get-ADComputerクエリの変更に関する提案はすべてを修正しました。ありがとうございました! – EzAdmin

+0

わかりやすくするため、上記のようにコメントを追加しました。完全に正しい方法は、1つのADクエリのみを使用することです。このように、コードを変更します。 '$コンピュータ=のGet-ADComputer -Filter {$ユーザ名様説明} - プロパティ説明 foreachの(($のcomputers.name)で$コンピューター) { $ compdescription = $コンピュータ。説明| out-string' 文字列配列ではなく、オブジェクト配列内のすべてのコンピュータに関する情報を格納しています。この情報には、名前と説明の両方が含まれます。次に、その配列を操作して必要な情報を取得します。 – Igor