2012-04-09 2 views
2

現在のバージョンを動作しない-Includeのための変数を使用して:は、Get-ChildItemコマンドレットを質問の

$tbd_list = @() 
foreach($i in $tbd) { 
    # -- If statement prevents duplicate id's 
    if(!($tbd_list -match $i.id)){ 
     $tbd_list += $i.id 
    } 
} 

をこの時点で私は$ tbd_listを印刷する場合、私は取得するには、次のように

私は、配列$ tbd_listを初期化します:

"dce50fdd-2298-45db-8aac-fb13a176fe1a*.*" 
"79c1538f-09b1-4ed7-b84c-ff1a7934596a*.*" 
"60511686-7a87-4352-a781-62e7c04913e5*.*" 
"0821f8ee-c1ca-4568-ab68-bb5e30d07268*.*" 
"3b9f5da0-fc2d-49e3-a11d-943f5ac2296a*.*" 
"ff7720fd-2c0f-43c8-871a-e283f231c823*.*" 

($ tbd_list.GetType()フルネームはSystem.Objectのを返します。)

私はその後、実行しようコード:

Get-ChildItem F:\store_test\ -Recurse -Include $tbd_list 

しかし、私は何も返されません。

しかし、私は手動で入力した場合、:

"dce50fdd-2298-45db-8aac-fb13a176fe1a*.*" 
"79c1538f-09b1-4ed7-b84c-ff1a7934596a*.*" 
"60511686-7a87-4352-a781-62e7c04913e5*.*" 
"0821f8ee-c1ca-4568-ab68-bb5e30d07268*.*" 
"3b9f5da0-fc2d-49e3-a11d-943f5ac2296a*.*" 
"ff7720fd-2c0f-43c8-871a-e283f231c823*.*" 

をして(($ tbd_list.GetTypeを同じラインを実行します。この時点で

$tbd_list = "dce50fdd-2298-45db-8aac-fb13a176fe1a*.*", "79c1538f-09b1-4ed7-b84c-ff1a7934596a*.*", "60511686-7a87-4352-a781-62e7c04913e5*.*", "0821f8ee-c1ca-4568-ab68-bb5e30d07268*.*", "3b9f5da0-fc2d-49e3-a11d-943f5ac2296a*.*", "ff7720fd-2c0f-43c8-871a-e283f231c823*.*" 

を私は$ tbd_listを印刷する場合、私はまだ取得します)。フルネームはまだSystem.Objectを返します。

Get-ChildItem F:\store_test\ -Recurse -Include $tbd_list 

これは完全に機能します。助言がありますか?以下

ソリューション

どちらの答えが正しいですが、私は一つだけを選ぶことができます。

変数が配列であることを確認した後、先頭と末尾の引用符を削除してスクリプトを実行しなければなりませんでした。ありがとう!

+0

'$ TBD_List'が配列の場合、それはそれを説明します...配列か文字列ですか? – JNK

+0

$ tbd_list.GetType()。FullNameはSystem.Stringを返します – jascissom

+0

'$ tbd_list'を二重引用符で囲みます。" "$ tbd_list" ' – JNK

答えて

2

$ tbd_list.GetType()。フルネームはあなたが$ tbd_listを定義し、それが配列されている必要がありますし、それがなかった場合にのみ、どのようにあなたの質問から明らかではないものの可能System.String

を与えます配列Get-ChildItemIncludeオプションで動作します。それが文字列だった場合、あなたが期待する方法ではうまくいかないでしょう。それを適切に定義します。上記の行を使用して

$tbd_list = "dce50fdd-2298-45db-8aac-fb13a176fe1a*.", "79c1538f-09b1-4ed7-b84c-ff1a7934596a.*", "dce50fdd-2298-45db-8aac-fb13a176fe1a*.", "79c1538f-09b1-4ed7-b84c-ff1a7934596a.*", "dce50fdd-2298-45db-8aac-fb13a176fe1a*.", "60511686-7a87-4352-a781-62e7c04913e5.*", "0821f8ee-c1ca-4568-ab68-bb5e30d07268*.", "3b9f5da0-fc2d-49e3-a11d-943f5ac2296a.*", "ff7720fd-2c0f-43c8-871a-e283f231c823*.*" 

Get-ChildItem

アップデートで私の作品:

$tbd_list = "$tbd_list, " + $i.id 

それが構築されます:

これは、あなたが間違ったことをやっているところであります文字列。

あなたは配列として$tbd_listを初期化する必要があります:引用符文字を含めるべきではありません

$tbd_list += $i.id 
+0

コメントをフォーマットすることができません。私は質問に自分の変更を示すつもりです。 – jascissom

+0

また、この変更後に$ tbd_list.GetType()。FullNameを実行すると、System.Objectが取得されます。私はそれが重要かどうかは分かりません。あなたに知らせるだけです。 – jascissom

+0

$ tbd_list = "dce50fdd-2298-45db-8aac-fb13a176fe1a *。*"、 "79c1538f-09b1-4ed7-b84c-ff1a7934596a *。*" ...などを手動で入力してGet-ChildItem行は、コードが動作します。しかし、上記のコードで$ tbd_list変数を設定しても、それは機能しません。 – jascissom

1

$i.id

$tbd_list = @() 

、あなたがそれにしたい項目を追加します。コマンドラインで、彼らは文字列を指定するが、これらの文字は、文字列変数に格納されている文字列の一部である場合、あなたのために働くことはないだろう。例:

9 > gci t*.txt 


    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Users\Keith 


Mode   LastWriteTime  Length Name 
----   -------------  ------ ---- 
-a---  4/3/2012 8:54 PM   13 test.txt 
-a--- 10/20/2011 9:13 AM   2872 trace.txt 


10 > $a = "`"t*.txt`"" 
11 > $a 
"t*.txt" 
12 > gci * -Include $a 

ストリップそうのように先頭と末尾の引用符オフ:

$tbd_list += $i.id.Trim('"') 
+0

これは他の提案と私の問題を解決しました。 – jascissom