首页 > 解决方案 > 如何将每个 URL 的值导出到不同的 XML 文件

问题描述

我有一个脚本可以从多个 URL:s 获取 API 数据(我无法全部获取,因为它被限制为特定数量)我可以使用 Transcript 将所有 URL:s 中的所有数据导出到一个文件(100 页每页 1000 个帖子)。但是我们需要将所有数据从一个 URL 导出到一个文件,并将下一个 URL 导出到另一个文件等。我尝试使用下面的代码执行此操作,但我得到 2 个文件(使用两个 URL:s)但所有数据都在第一个文件。不太清楚如何解决这个问题。

Import-Module pscx
function Ignore-SelfSignedCerts
{
    try
    {
        #Write-Host "Adding TrustAllCertsPolicy type." -ForegroundColor White
        Add-Type -TypeDefinition  @"
        using System.Net;
        using System.Security.Cryptography.X509Certificates;
        public class TrustAllCertsPolicy : ICertificatePolicy
        {
             public bool CheckValidationResult(
             ServicePoint srvPoint, X509Certificate certificate,
             WebRequest request, int certificateProblem)
             {
                 return true;
            }
        }
"@
        #Write-Host "TrustAllCertsPolicy type added." -ForegroundColor White
      }
    catch
    {
        #Write-Host $_ -ForegroundColor "Yellow"
    }
    [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
}
Ignore-SelfSignedCerts

$option = [System.StringSplitOptions]::RemoveEmptyEntries
$Uri = "https://prime/webacs/api/v1/data/Clients?.firstResult=0&.maxResults=1&.full=true,
https://prime/webacs/api/v1/data/Clients?.firstResult=2&.maxResults=1&.full=true"
$separator = ","
$urlList = $Uri.Split($separator, $option)

function Get-BasicAuthCreds {
    param([string]$Username,[string]$Password)
    $AuthString = "{0}:{1}" -f $Username,$Password
    $AuthBytes  = [System.Text.Encoding]::Ascii.GetBytes($AuthString)
    return [Convert]::ToBase64String($AuthBytes)
}
$BasicCreds = Get-BasicAuthCreds -Username "User" -Password "Password"

$StartNum = 0
$Result = $null

$Result = foreach ($url in $urlList){
    Start-Transcript -Path "C:\Data\URL\$StartNum.xml"
    $DataURL = Invoke-WebRequest -Uri $url -Headers @{"Authorization"="Basic $BasicCreds"}
    Write-Host $DataURL
    # Give feedback on how far we are
    Write-Host ("Initiated request for {0}" -f $url)  
    $StartNum++
    cls
    Stop-Transcript
    $DataURL = $null
}

标签: xmlpowershellapi

解决方案


我设法解决了它。我需要将 Web-Request 中的数据放置到一个变量中,每次循环结束时我都会清除该变量。以上代码已更新。


推荐阅读