2016-09-01 8 views
0

Ich versuche, aus Microsoft Update Hot-Fix-URLs zu drucken und siein Powershell ersetzen

$link=Get-MSHotfix|Where-Object {$_.Installedon -gt ((Get-Date).Adddays(-20000))}|Select-Object -Property KBArticle 


foreach($line in $link){ 

     [String]$line = $line -replace 'http://support.microsoft.com/?kbid=','https://support.microsoft.com/en-us/kb/' 


    [String]$line 
} 

Ich habe Problem zu ändern, weil es es so ausdruckt und es ersetzt nicht:

@{KBArticle=http://support.microsoft.com/?kbid=3045992} 
@{KBArticle=http://support.microsoft.com/?kbid=3045999} 
@{KBArticle=http://support.microsoft.com/?kbid=3046017} 
@{KBArticle=http://support.microsoft.com/?kbid=3046359} 
@{KBArticle=http://support.microsoft.com/?kbid=3046737} 

Wenn ich es nur ohne -replace drucke, sieht es gut aus.

ich vollständige URL KB Article

Ich versuche zu bekommen versuchen, ein Skript zu erstellen mit all Hot Fixes mit Links ausdrucken und Namen aus dem Titel, wenn möglich

Dank

+0

Was ist Ihre Frage? –

+0

'-replace' Argument ist ein Regulärer Ausdruck. Entweder escape '?' Als '\?' Oder benutze die Klartextmethode '$ line.replace ('foo', 'bar')' – wOxxOm

+0

Hallo, wenn ich 'replace ('foo', 'bar') benutze, bekomme ich einen Fehler : 'Der Methodenaufruf ist fehlgeschlagen, da [Selected.System.Management.Automation.PSCustomObject] keine Methode namens 'Replace' enthält. – mehnihma

Antwort

1

Yep Sie müssen den regulären Ausdruck bauen, RegEx101

$link=Get-MSHotfix|Where-Object {$_.Installedon -gt ((Get-Date).Adddays(-20000))}|Select-Object -Property KBArticle 

foreach($line in $link){ 

     [String]$line = $line -replace "http:\/\/support\.microsoft\.com\/\?kbid=",'https://support.microsoft.com/en-us/kb/' 


    [String]$line 
} 

oder Sie String verwenden:

$link=Get-MSHotfix|Where-Object {$_.Installedon -gt ((Get-Date).Adddays(-20000))}|Select-Object -Property KBArticle 


foreach($line in $link){ 

     [String]$line = 'https://support.microsoft.com/en-us/kb/' + $line.substring(35) 


    [String]$line 
} 

Schneiden Sie die Zeichenfolgen nach den ersten 35 Zeichen und fügen Sie sie zu Ihrer URL hinzu.

EDIT:

sehr interessant, auch das, was funktioniert, ist die andere Art ersetzen ...

$link=Get-MSHotfix|Where-Object {$_.Installedon -gt ((Get-Date).Adddays(-20000))}|Select-Object -Property KBArticle 

foreach($line in $link){ 

    [String]$line = $line.replace("http://support.microsoft.com/?kbid=",'https://support.microsoft.com/en-us/kb/') 


[String]$line 
} 

Ich bin ein wenig verwirrt ...

wenn Sie -replace verwenden Sie müssen eine Regex nehmen, wenn Sie die Funktion .replace() aufrufen, müssen Sie eine Zeichenfolge geben.

+0

Hallo, das funktioniert, nur jetzt bekomme ich es so '@ {KBArticle = https: //support.microsoft.com/en-us/kb/3160005}' Wie kann ich '@ {KBArticle und}' aus der Ausgabe entfernen? Dank – mehnihma

+0

Das funktioniert '$ link = Get-mshotfix | Where-Object {. _ $ Installedon -gt ((Get-Date) .Adddays (-20000))} | Select-Object -ExpandProperty KBArticle foreach ($ line in $ link) { $ line = $ zeile -replace "http: \/\ support \ .microsoft \ .com \/\? kbid =", 'https: //support.microsoft.com/de -us/kb/' $ zeile } ' – mehnihma

+0

mit' $ line.KBArticle' -> die Ausgabe ist ein Objekt mit der Eigenschaft KBArticle -> Sie müssen auf die Eigenschaft statt '[String] $ zugreifen line' -> benutze '[String] $ line.KBArticle' –

Verwandte Themen