2016-10-07 5 views
1

У меня есть XML-файл, который содержит истечение срока действия элементов вместе с другими атрибутами. Мне нужно проанализировать файл и выяснить все элементы, срок действия которых истекает через 50 дней через сценарий Powershell.Фильтрация из selectnodes через Powershell

Записи в 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