2016-11-08 3 views
1

私はVB.netで動作するVisual Studioフォームを持っており、ADユーザーのセットアップに必要な情報を収集しています。結局のところ、この情報はPowershellに渡され、返品情報は必要ありません。その前に、プリンタコードが他のユーザーに送信される前に誰かに割り当てられているかどうかを確認する必要があります。私はそれのために書かれたシンプルなパワーシェルスクリプトを持っています。 (私たちは、プリンタコードを格納するためのポケットベルフィールドを使用します。)VB.netとpowershellの変数

Import-Module ActiveDirectory 
$Page = $args[0] 
Get-ADUser -Filter { Pager -like $Page } | FT Name 

私のセットアップ私はHEREを見つけ、そして私のスクリプトにそれを修正しようとしましたが、それは

Dim results As Collection(Of PSObject) = MyPipeline.Invoke() 

にそれをクラッシュしたコード私に与えられる:System.Management.Automation.dllで 'System.Management.Automation.ParseException'型の未処理の例外が発生しました

私は彼の小さな6 + 5基本的なスクリプトを実行すると動作しますが、情報を取得して名前を返すそれはそれを好まない。見つけたら、人の名前を返すにはどうすればいいですか?そして実行されないので、$ args [0]がまだ動作するようにプリンタコードを渡すかどうかはわかりません。

答えて

0

resultsには、PowerShellオブジェクトのコレクションが必要です。 Get-ADUserコマンドをFormat-Tableにパイプすると、効果的にオブジェクトがストリングのストリームにストリップされます。 | FT Nameなしで試してください。

Import-Module ActiveDirectory #if you're using powershell 3 or later, this may be redundant 
# $Page = $args[0] # don't need to do this 
$results = Get-ADUser -Filter { Pager -like $args[0] } 
Write-Verbose $results 
#Write-Verbose $results.Name #try this if the above one works 

更新:

Write-Verboseが問題を引き起こしている可能性。総PSコードとして

Get-ADUser -Filter { Pager -like $args[0] } 

ちょうどその1行:

はこれを試してみてください。 (PowerShell 3.0以降であれば、Import-Moduleは必要ありません)この行は `Get-ADUser username | Get-MemberからのタイプTypeName: Microsoft.ActiveDirectory.Management.ADUserのオブジェクトを返します。

PowerShellを使用せずに.Netオブジェクトタイプを直接使用することもできます。私はPowerShellを使って作業したこと以外に.NETについて知識がありません。

.NETを使用してADにアクセスすると、info from MSDN

+0

同じ結果が得られました。私は結論のコメントを外して、それがうまくいくかどうかを確認しようとしましたが、うまくいきませんでした。 1つの結果をVisual Studioに返すだけで、私が従う例がより良い方法ですか? –

+0

PSスクリプトを書くと、最初の結果だけが返されます。正確に1つの結果がない場合は、コレクション内のアイテムの数を確認してエラーを返すことをお勧めします。 'Write-Verbose $ results'の代わりに' Return $ results'を試してみてください。 – Xalorous