Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqljob,如果文件不包含特定文本,则使powershell步骤失败_Powershell_Sql Job - Fatal编程技术网

Sqljob,如果文件不包含特定文本,则使powershell步骤失败

Sqljob,如果文件不包含特定文本,则使powershell步骤失败,powershell,sql-job,Powershell,Sql Job,这是一种尝试,旨在为解决问题的可能方案找到具体答案 我有一份工作,使用 powershell-命令“调用WebRequest”https://someserver.dom/fetch.php -文件c:/tmp/data.xml“ 有时来自上游的数据不是正确的XML。我只想“grep”文件中的最后一行,如果它不是预期的,我希望该步骤失败,因此在该步骤失败之前重试几次 文件大小也可能是一个错误标准。传输失败是几行,成功的是兆字节。所以基本上我为此做了一个函数。设置尝试次数和要运行的脚本 funct

这是一种尝试,旨在为解决问题的可能方案找到具体答案

我有一份工作,使用
powershell-命令“调用WebRequest”https://someserver.dom/fetch.php -文件c:/tmp/data.xml“

有时来自上游的数据不是正确的XML。我只想“grep”文件中的最后一行,如果它不是预期的
,我希望该步骤失败,因此在该步骤失败之前重试几次


文件大小也可能是一个错误标准。传输失败是几行,成功的是兆字节。

所以基本上我为此做了一个函数。设置尝试次数和要运行的脚本

function TryAgain($Attempts = 1, $Scriptblock){
    while($Attempts -gt 0){
        try{
            Invoke-Command -ScriptBlock $Scriptblock
            Break
        }catch{
            $_.Exception
            $Attempts -= 1
        }
    }
}
在本例中,我们希望找出它是否是有效的XML,因此我们将获取
调用WebRequest的
.RawContent
,并对
$(new object System.XML.XmlDocument).LoadXml()
进行测试。如果失败,则抛出一个错误;如果失败,则将原始内容输出到一个文件。错误不会仅保存到有效的XML文件中

$Site = "https://someserver.dom/fetch.php"
$OutFile = "c:/test/data.xml"
(Invoke-WebRequest $Site).RawContent | %{
    try{
        $(new-object System.Xml.XmlDocument).LoadXml($_)
        $_ | out-file $OutFile
    }catch{
        throw "Bad XML"
    }
}
现在我们结合成一个最终产品

$Site = "https://someserver.dom/fetch.php"
$OutFile = "c:/test/data.xml"

function TryAgain($Attempts = 1, $Scriptblock){
    while($Attempts -gt 0){
        try{
            Invoke-Command -ScriptBlock $Scriptblock
            Break
        }catch{
            $_.Exception
            $Attempts -= 1
        }
    }
}

TryAgain -Attempts 3 -Scriptblock {
    (Invoke-WebRequest $Site).RawContent | %{
        try{
            $(new-object System.Xml.XmlDocument).LoadXml($_)
            $_ | out-file $OutFile
        }catch{
            throw "Bad XML"
        }
    }
}
因为你不需要重试,这里所有的亮点都是基本的

(Invoke-WebRequest https://someserver.dom/fetch.php).RawContent | %{
    try{
        (new-object System.Xml.XmlDocument).LoadXml($_)
        $_ | out-file C:\test\test.xml
    }catch{}
}

你更愿意检查它是否只是xml,或者它是否以xml结尾,但我认为如果它以通常的形式结尾,那么其他的可能就可以了。看起来令人印象深刻。但这是不是太过分了?它是否可以读取文件,检查有效性,如果无效则失败,并让sql作业处理重试、等待时间和硬失败?我可以在每一步上说它应该重试n次,并在重试之间等待m秒。就在你的第二个街区?我想抛出“坏XML”会在步骤上跳出一个失败的出口。不管怎样,现在是凌晨4点,我明天试试;-)你可以使用第二个街区。我以为你需要在webinvokes上重试。如果此时不需要重试,我还可以将其设置为一行程序。sql作业处理程序可以管理重试,而不需要将重试放在stepNice中,从而使其复杂化。几小时后的反馈