2017-10-06 7 views
1

いくつかのフォルダの内容を削除しようとしています。 Get-ChildItemは、以下のようなオブジェクト受け取るので、Powershell Select-Object値の配列を取得する方法

$Config.SubPaths | Select-Object { Join-Path $Config.InstallPath $_ } | Get-ChildItem 

しかし、それは動作しません:

@{ Join-Path $Config.InstallPath $_ =C:\Program Files\App\www\app1} 

エラー

$Config = @{ 
    InstallPath = 'C:\Program Files\App' 
    SubPaths = @('www\app1', 'www\app2', 'www\app3') 
} 

そして、ここでは内容を取得するためのコードです:私が持っているもの :

Get-ChildItem : Cannot find drive. A drive with the name '@{ Join-Path $Config.InstallPath $_ =C' does not exist. 
At line:1 char:85 
+ ... elect-Object { Join-Path $Config.InstallPath $_ } | Get-ChildItem 
+                ~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (@{ Join-Path $C...stallPath $_ =D:String) [Get-ChildItem], DriveNotFoun 
    dException 
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand 

Select-Objectの結果を文字列の単純な配列に変換するにはどうすればよいですか?コードを改善するための他の方法はありますか?

+0

'$ Config.SubPathsを作っているし、

$Config.SubPaths | Select-Object @{Name="Path";Expression={Join-Path $Config.InstallPath $_}} | Get-ChildItem 

Get-ChildItemは、新しいオブジェクトのパスプロパティにバインドする必要があります。しかし、タイトルに質問に答えるために、あなたはこれを行っている可能性ForEach-Object {結合パス$ Config.InstallPath $ _} | Get-ChildItem' – Matt

答えて

1

結果は、リテラルプロパティJoin-Path $Config.InstallPath $_で新しいオブジェクトを作成したためです。代わりに...

$Config.SubPaths | ForEach-Object { Join-Path $Config.InstallPath $_ } | Get-ChildItem 

単一のサブパスのプロパティを選択するのではなく、それぞれのサブパスから文字列を生成しようとしています。代わりにForeach-objectを使用してコレクションを反復処理すると、探している結果が得られます。

計算されたプロパティを使用してカスタムオブジェクトとプロパティを作成することができますが、これはあなたが行っている方向ではないことがわかります。 |

+0

ありがとう、それは私が探しているものです。 – Zergatul

関連する問題