0

Ich versuche, das Powershell-Skript aufzuschreiben, das die Elementversion oder Sprachversion "en" aus allen Dateien in der Ordner-Tour entfernen sollte, wenn es den Abschnitt "Titel" in der Datei findet.Entfernen von Dateiversionen aus der Datei

Mein Skript arbeitet nur auf den obersten Dateinamen in der Schleife, deren Titel leer ist, aber nicht auf andere Dateien in der Schleife, deren Titel ebenfalls leer sind. Wie kann ich dieses Skript ändern, so dass es durch die Schleife blättern kann und die Sprachversion aus jeder dieser verschiedenen Dateien entfernen kann, deren Titel leer ist?

$SN1 = Get-ItemProperty -Path "master:/content/www/home/company/tour/*" -Name "Title" 

$SN2 = '' 

$SN3 = 
foreach ($SItem in $SN1.Title) { 

    if ("$SItem" -eq $SN2) 
    { 
     Remove-ItemVersion -Path "master:/content/www/home/company/tour/*" -Language "en" 
    } 

} 

Antwort

0

Sieht aus wie Ihre grundlegende Syntax Fähigkeiten als einige zusätzliche Studie benötigen Sie aus irgendeinem Grund Anführungszeichen um die Variable haben Sie testen und für den Titel falsch mit Syntax.

Also zunächst einmal ändern:

if ("$SItem" -eq $SN2) 

An:

if (!($SItem)) 

Dann SN1 ist nur der Titel, wie Sie es geschrieben haben, so versuchen $ SN1.title einfach gewonnen zu tun arbeite nicht. Außerdem, was ist die Quelle, die Sie abfragen?

EDIT: Antwort unten:

Nun, da Sie den Objekttyp, sofern deutlich wird. Hier ist der Code, aber Sie müssen zu überprüfen, was gelöscht zu werden, ist der richtige Schlüssel/Wert:

$SN1 = Get-ItemProperty -Path "master:/content/www/home/company/tour/*" -Name "Title"  
if ($SN1.Title -eq '') 
{ 
    Remove-ItemVersion -Path "master:/content/www/home/company/tour/*" -Language "en"  
} 

Es sei denn, ich bin etwas fehlt, basierend auf dem Get-Member $ SN1 ist ein einzelnes Element, so gibt es keine Notwendigkeit, alles zu wiederholen. Wenn es irgendwo mehrere gibt, habe ich keine Hinweise in Ihrem Code gesehen, deshalb müssen Sie mehr Details angeben. Dieser Befehl liest den einzelnen Titel und wenn er leer ist, lösche etwas anderes. Für eine Sammlung von Titeln müssen Sie angeben, wo sie leben usw., um weitere Hilfe zu erhalten.

+0

Korrigieren Sie, weil Ihre Syntax falsch ist. Kannst du möglicherweise die Ausgabe des folgenden Befehls für mich einfügen ?: $ SN1 = Get-ItemProperty -Path "master:/content/www/home/unternehmen/tour/*" -Name "Titel" $ SN1 | GM Entschuldigen Sie die Kommentare dieser Seite friggin wrap, die 2 Befehle über Ihrer ursprünglichen ersten Zeile ist, um $ SN1 zu definieren, dann führen Sie den 2. Befehl aus, der $ SN1 | Get-Member –

+0

Sie müssen den Befehl ausführen, den ich für Pipe die $ SN1 to get-Mitglied ich brauche, um zu sehen, welche Art von Objekt, das zurückkehrt dann kann ich Ihnen mit dem richtigen Code helfen. Diejenigen unterhalb des Buchungscodes, die ich Ihnen mitteilen kann, sind nicht korrekt, weil sie auch keine Ahnung haben, welche Objekttypen zurückgegeben werden, damit sie raten.Run: "$ SN1 | Get-Mitglied" und die Ausgabe bitte –

0

Ich bin mir nicht sicher über den Pfad, den Sie auswählen, Get-ItemProperty kann kein * in seinem Pfad verwenden, um jedes Element im Pfad auszuwählen. Sie müssen die Elemente zuerst abrufen und sie dann in die Get-ItemProperty leiten.

Sie müssen ein Array von jedem Element und seinen Eigenschaften erstellen und diese dann durchlaufen.

$SN1 = Get-ChildItem -Path ""master:/content/www/home/company/tour" | Get-ItemProperty | select * 

Dann Schleife durch jedes Element:

$DebugPreference = 'Continue' 
foreach ($SItem in $SN1) 
{ 
    Write-Debug -Message "Checking item $($SItem.Name) for a title." 
    if(!($SItem.Title)) 
    { 
     Write-Debug -Message "A title does not exist for this item $($SItem.FullName), removing the language property of its ItemVersion." 
     Remove-ItemVersion -Path $SItem.FullName -Language "en" 
    } 

} 

Als Anmerkung Sie auf dem Get-ChildItem verwenden -Recurse wollen werden, wenn Sie Unterverzeichnisse haben Sie durch und suchen möchten.

+0

@ user7986299 Ich aktualisierte den Code, es gab einen Fehler, es sollte .FullName anstelle von .FullPath sein. – Paolis

+0

Sie müssen den Code in Remove-ItemVersion veröffentlichen, das ist kein nativer Powershell-Befehl, mit dem ich vertraut bin. Es besteht die Möglichkeit, dass etwas anderes erwartet wird als der Pfad, den wir bereitstellen, oder es sind zusätzliche Parameter erforderlich. Außerdem sollten Sie Debugging-Meldungen hinzufügen, um zu wissen, was Ihr Code macht. Ich habe oben Beispiele hinzugefügt. – Paolis