2017-09-19 53 views
0

次のコードは、私にいくつかの出力が得られますが、私はPowerShellのConverFrom-JSONネストされた構文解析

{@{id=44068; uuid=959844e7-5bfc-45f9-9a87-54bc6384dbab; name=projects; createdAt=2016-10-06T20:33:05; createdBy=user1; lastUpdatedAt=2017-02-14T18:30:45; lastUpdatedBy=user2; projectId=; f... 
を次のようにこれは出力を生成するprojectGroups

$uri = 'https://projects.brand.com/data/folder/8133' 

wget $uri -UseDefaultCredentials | 
ConvertFrom-JSON | 

Select projectGroups 

からわずかIDのリストを取得するために苦労しています

これまでのところ私はグーグルから集まってきましたが、私はprojectGroupsの下にid = #####のforeachリストを与えるためにコードの残りの部分をどのように構成するのかはわかりません。

私はその後、別のURLでこれらのprojectidsのそれぞれを取り、それらを使用する必要があるため https://projects.brand.com/data/project/export/projects-tasks?projectIds[]= <projectid1> & projectIdsは[] = <projectid2>

どのように私はprojectidsの配列を作成するか、上記のコードに追加できることを必要とする

projectsGroupからURLにforeachとして注入するか、URLに直接挿入するだけですか?

編集:私は答えのコードに基づいて

次:私に与えている

$pid = @() 
$uri = "https://projects.brand.com/data/folder/" 
$projectUri = $uri + "8133" 
$aJsonObj = wget $projectUri -UseDefaultCredentials | ConvertFrom-JSON 
$projectGroups = $aJsonObj.projectGroups 
foreach ($id in $projectGroups.projectId) { 
    $nextProjectUri = $uri + $id 
    $anotherJsonObj = wget $nextProjectUri -UseDefaultCredentials | ConvertFrom-JSON 
    $pid = $pid + $id 
} 

Out-Host $pid 

は、配列のための変数のエラーを上書きすることはできません。私はそのコードがどちらの場合でも、そのフォルダ内の各プロジェクトのIDを取得するつもりはないように感じる。私は思っていないforeachループ中にURIを変更すべきではありません。それは元のURIから各idをループして配列にプッシュするだけです。

編集2:

$uri = 'https://projects.brand.com/data/folder/8133' 
$pid = @() 
$projectids = wget $uri -UseDefaultCredentials | 
ConvertFrom-JSON | Select projectGroups | select -Expand projectGroups | select id 
Write-Host $projectids 

foreach($id in $projectids) {  
    $pid += $id 
    } 

Write-Host $pid 

これは私のリストを与えるが、私はそれを行うときには、{ID = #####} @示します。これは、私が前のコードよりも必要なものに近いと感じます。 pidはまだ読み取り専用または一定のエラーをスローしています。

+0

別の '| -Expand projectID'を選択しますか? –

+0

プロジェクトの選択| -Expand projectGroups |を選択します。 idを選択する それは私にリストを与える、今私はちょうどそれを配列に配置する方法を理解する必要があります – Shenanigator

答えて

0

私はそれが動作を検証することはできませんが、このような何か:

$uri = "https://projects.brand.com/data/folder/" 
$projectUri = $uri + "8133" 
$aJsonObj = wget $projectUri -UseDefaultCredentials | ConvertFrom-JSON 
$projectGroups = $aJsonObj.projectGroups 
foreach ($id in $projectGroups.projectId) { 
    $nextProjectUri = $uri + $id 
    $anotherJsonObj = wget $nextProjectUri -UseDefaultCredentials | ConvertFrom-JSON 
    # do something with it.... 
} 
0

答えは、私が思ったよりも少し難しくしました。私は最終的に、あなた方が正しい方向に私を指摘した後に役立つ何かを見つけました。私は使用している最終コードを編集しました。

ルートフォルダをループしてすべての子フォルダを見つけて、それらの子フォルダ内のプロジェクトIDをループします。コードは2つのレベルの深さにしか構築されていませんし、おそらく経験豊富なコーダーほど効率的ではなく、きれいではありませんが、ここはそうです。

function Get-Data(){ 
    #set the root folder 
    $uri1 = 'https://project.brand.com/data/folder/8133' 
    [PSObject[]] $fid = @() 
    [PSObject[]] $pid = @() 

    $folderIds = wget $uri1 -UseDefaultCredentials | 
    ConvertFrom-JSON | select children | select -Expand children | select id 

    #get all the sub-folder ids 
    ForEach-Object{  
     [PSObject[]]$fid += $folderIds.id 
    } 

    #use the folder ids to loop through and retreive all project ids in subfolders 
    for($i = 0 ; $i -ne ($fid.length); $i++){ 

     $uri2 = 'https://projects.brand.com/data/project/folder/' 
     $getUri1 = $uri2 + [PSObject[]]$fid[$i] 
     $projectIds = wget $getUri1 -UseDefaultCredentials | 
     ConvertFrom-JSON | Select data | select -Expand data | select id 

     #obtain all the project ids 
     ForEach-Object{  
      [PSObject[]]$pid += $projectIds.id 
     } 

     $uri3 = "https://projects.brand.com/data/project/export/projects-tasks?projectIds[]=" 
     $getIds = [PSObject[]]$pid -join "&projectIds[]=" 
     $getUri2 = $uri3 + $getIds 
     $of = "\\domain\dept\DI\Extracts\Projects Tasks " + $i + ".xlsx" 

     #retrieve excel files of tasks from each sub-folder 
     wget $getUri2 -outfile $of -UseDefaultCredentials 

    } 
} 
関連する問題