2016-07-06 22 views
0

Ich versuche, ein Synchronisationsskript in PowerShell zu erstellen, so dass meine Anwendungen in MDT regelmäßig in unserem Haupt kopiert werden Dateiserver basierend auf dem Ordnernamen (in MDT befinden sich Anwendungen in einem Ordner, in dem auf unserem Hauptserver Anwendungen aufgeteilt sind, abhängig von der Abteilung, in der sie verwendet werden).Wie Powershell-Array für bestimmte Zeichenfolgen zu durchsuchen und dieses Ergebnis in einem Kopie-Element -include-Skript verwenden

Von dem, was ich im Web gelesen habe, wäre der beste Weg, ein Array mit "Get-ChildItem" zu füllen, was ich irgendwie dachte, wie zu tun (siehe Code unten).

Nachdem das Array jedoch gefüllt ist, weiß ich nicht, wie dieses Array nach bestimmten Ergebnissen durchsucht wird, noch weiß ich, wie diese Ergebnisse mit copy-item verwendet werden.

Kurz gesagt, was ich tun muss: Erstellen Sie ein Array mit "Get-ChildItem", fragen Sie das resultierende Array nach bestimmten Ordnern und lassen Sie diese Ordner an bestimmte Ziele kopieren.

Hier ist der Code, den ich habe bisher:

$arr = Get-ChildItem \\slmtl-wds02.domain.inc\deploymentshare$\applications | 
    Where-Object {$_.PSIsContainer} | 
    Foreach-Object {$_.Name} 
$sourcepath = \\slmtl-wds02.domain.inc\deploymentshare$\applications 
$destSLARC = \\slmtl-fs01.domain.inc\folder\it_services\private\software\service_desk\pc\SLARCMTL 
$destSLMTL = \\slmtl-fs01.domain.inc\folder\it_services\private\software\service_desk\pc\SLMTL 
$destSLGLB = \\slmtl-fs01.domain.inc\folder\it_services\private\software\service_desk\pc\SLGLB 
$destSLTECH = \\slmtl-fs01.domain.inc\folder\it_services\private\software\service_desk\pc\SLTECH 

Vielen Dank im Voraus für Ihre Hilfe :)

Antwort

0
$sourceLocation = "c:\analysis\" 
$targetLocation = "c:\analysisCopy\" 
$included = @("folder1", "folder2") 

$result = @() 
foreach ($i in $included){ 
    $result += get-ChildItem $sourceLocation -filter $i | Where-Object {$_.PSIsContainer} 
} 
$result | foreach-Object { copy-item $_.FullName -Destination $targetLocation -Recurse} 
+0

JA! Das funktioniert perfekt. Wenn mir mein Gedächtnis gut tut, wenn ich will, dass es überschreibt, was da ist, muss ich einfach - Force nach dem -Recurse hinzufügen, oder? –

+0

Ja, wenn Sie -force hinzufügen, überschreibt es alle Dateien, die bereits im Ziel vorhanden sind, anstatt Ausnahmen auszulösen. Es werden jedoch keine vorhandenen Dateien vom Ziel gelöscht, die nicht mehr an der Quelle vorhanden sind. Wenn Sie dies also möchten, möchten Sie das Ziel möglicherweise zuerst löschen. – pabrams

+0

Nein, meistens dient dieses Skript dazu, einfach das zu kopieren, was ich auf unserem MDT-Server auf unseren Haupt-Datei-Server aktualisiere, wo jeder Techniker aus allen Büros Zugriff hat. So ist das Pflegen der alten Sachen kein wirkliches Problem. Vielen Dank für die Antwort :) –

0

Hoffen, dass diese Werke den Weg D zu ändern: \ auf Ihren gewünschten Pfad den Namen des Ordners geben Sie auf der Suche nach

$Keyword=[Microsoft.VisualBasic.Interaction]::InputBox("Enter your Query") 
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null 
Get-ChildItem D:\ -recurse | Where-Object {$_.PSIsContainer -eq $fasle -and $_.Name -match "$keyword"} | Copy-Item -Destination d:\test 
+0

glaube ich nicht, dass Sie verstehen, was ich tun möchte. Ich möchte nicht bestimmte Dateitypen oder Dateinamen auswählen. Der gesamte Prozess basiert auf Ordnern, nicht auf Dateien. Ich muss einen Ordner abfragen, um alle Unterordnernamen zu haben, und dann das Ergebnis nach bestimmten Namen abfragen und dieses Ergebnis zu einem Kopierelement hinzufügen, damit sie kopiert werden können. Ihre Lösung sagt einfach "Durchsuchen Sie diesen Ordner nach diesen Dateitypen/Namen und kopieren Sie sie hier". Ich weiß, wie man Robocopy benutzt, aber es kann nicht tun, was ich brauche (na ja, aber ich hätte so viele Ausnahmen, dass es einfach keinen Sinn ergibt). –

+0

überprüfen Sie es jetzt die Antwort geändert – DisplayName

+0

@Jacksh Ich denke, er möchte auf mehrere Keywords suchen. – pabrams