2016-10-07 84 views
1

我有一个XML文件,其中包含元素的过期时间以及其他属性。我必须解析该文件,并通过Powershell脚本找出将在未来50天内过期的所有元素。通过Powershell从selectnodes进行过滤

项在XML文件:

<Certificate> 
     <Version>3</Version> 
     <SignatureAlgorithm>sha1RSA</SignatureAlgorithm> 
     <Subject /> 
     <NotAfter>2017-07-12T09:19:44Z</NotAfter> 
     <NotBefore>2016-07-12T09:19:44Z</NotBefore> 
     <IsVerified>true</IsVerified> 
</Certificate> 

现在通过PowerShell中,我试图做这样的事情:

$ExpiryDate=(GET-DATE).AddDays(50) 
$xdoc = [xml] (get-content $InputFile) 
$xdoc.SelectNodes("//Certificate/NotAfter[. > $ExpiryDate]") 
#$xdoc.Save($ResultsFile) 

但这似乎并不奏效。我甚至不确定是否需要比较“NotAfter”字段作为日期或字符串。 任何指针都会有很大的帮助。

回答

0

没有你的xml输入的完整例子,很难给你一个正确的答案。但是,您可以了解如何在下面的示例中继续:

$xml = [xml] @" 
    <?xml version="1.0" encoding="UTF-8" ?> 
    <CertificateList> 
     <Certificate> 
       <Version>3</Version> 
       <SignatureAlgorithm>sha1RSA</SignatureAlgorithm> 
       <Subject /> 
       <NotAfter>2017-07-12T09:19:44Z</NotAfter> 
       <NotBefore>2016-07-12T09:19:44Z</NotBefore> 
       <IsVerified>true</IsVerified> 
     </Certificate> 
     <Certificate> 
       <Version>3</Version> 
       <SignatureAlgorithm>sha1RSA</SignatureAlgorithm> 
       <Subject /> 
       <NotAfter>2014-05-12T09:19:44Z</NotAfter> 
       <NotBefore>2016-03-12T09:19:44Z</NotBefore> 
       <IsVerified>true</IsVerified> 
     </Certificate> 
    </CertificateList> 
"@ 

$ExpiryDate=(Get-Date).AddDays(50) 
$xml.CertificateList.Certificate | ?{ [DateTime] $_.NotAfter -gt $ExpiryDate } 
+0

非常感谢。有效 :) – user2549046