使用PowerShell附加到URL

时间:2018-01-21 17:23:06

标签: powershell

await

此代码是我编写的其他一些代码的改编。其他5个脚本运行正常。主要区别在于其他代码必须遍历多个文件夹并获取每个文件夹下的项目ID,但此代码只需要通过单个文件夹。现在在其他代码中,ConfigureAwait(false)function Get-Data(){ [PSObject[]]$pid = '' $getUri1 = 'https://playbook2.com/data/project/folder/28220' $projectIds = wget $getUri1 -UseDefaultCredentials | ConvertFrom-JSON | Select data | select -Expand data | select id Write-Host $projectIds #obtain all the project ids ForEach-Object{ [PSObject[]]$pid += $projectIds.id } Write-Host $pid $uri3 = "https://playbook2.com/data/project/export/projects-tasks?projectIds[]=" $getIds = [PSObject[]]$pid -join "&projectIds[]=" $getUri2 = $uri3 + $getIds $of = "\\ant\dept\DCGSI\Extracts\Time_Tracking_Tasks.xlsx" Write-Host $getUri2 #retrieve excel files of tasks from each sub-folder wget $getUri2 -outfile $of -UseDefaultCredentials } 代码工作正常,我得到了导出。我在这段代码中看到的问题是它没有像我期望的那样加入URL。

https://playbook2.com/data/project/export/projects-tasks?projectIds[]=######&projectIds[]=#######是获得我需要的所有项目数据的预期和以前看到的输出。

上述脚本的问题在于它提供的https://playbook2.com/data/project/export/projects-tasks?projectIds[]=&projectIds[]=######&projectIds[]=#######无效。

有没有一种方法可以告诉它只为对象中的第一个项目执行$ pid,然后在下一个n上加入$uri3直到列表末尾?我试过了

$getIds

"&projectIds[]="

但这导致没有附加任何内容。

1 个答案:

答案 0 :(得分:0)

我发现了几个"错误"在你的剧本中。

首先,您使用的是变量$pid,它是系统默认变量。您可以通过键入

来检查系统全局变量
Get-Variable    

其次$ pid是用空字符串定义的。初始化PSObject的正确方法是使用$myVar = New-Object PSObject。将[PSObject[]]$pid = ''替换为$myProjectIds = New-Object PSObject

为了便于阅读,我冒昧地重写了你的剧本。

function Get-Data(){
    $GetProjectsUri = 'https://playbook2.com/data/project/folder/28220'
    $ExportProjectsUri = 'https://playbook2.com/data/project/export/projects-tasks?'
    $ExportFilePath = "\\ant\dept\DCGSI\Extracts\Time_Tracking_Tasks.xlsx"

    $GetProjectsJson = Invoke-WebRequest -Uri $GetProjectsUri -UseDefaultCredentials
    Write-Output $GetProjectsJson 

    $Projects = ConvertFrom-JSON -InputObject $GetProjectsJson
    Write-Output $Projects

    foreach ($Project in $Projects) {
        $ProjectId = $Project.data.id

        # Check if ProjectId exists
        if ($ProjectId) {
            $ExportProjectsUri = $ExportProjectsUri + 'projectIds[]=' + $ProjectId
        }
    }

    Write-Output $ExportProjectsUri

    Invoke-WebRequest Invoke-WebRequest -Uri $ExportProjectsUri -outfile $ExportFilePath -UseDefaultCredentials
}

干杯 格伦