Jump to content

Berechtigungsproblem copy-item


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

ich habe mir ein Script gebaut, dass am Ende Dateien zwischen zwei Windows Hosts hin und her kopieren soll.

Die entsprechende Zeile ist:

 

...

get-childitem -path \\DCS-LAB-1\c$\backup | Where-Object {$_.LastWriteTime -gt ((get-date).AddDays(-2))} | where-object {$_.name -match "BACKUP_"} | ForEach-Object {copy-Item $_.fullname -Destination \\DCS-LAB-2\c$\backup}

...

 

Starte ich das Script als Administrator, funzt alles super. Starte ich es aus dem Task scheduler, der in unserer Software verankert ist, erhalte ich eine access denied Meldung.

 

Es handelt sich um zwei Windows 2012 Hosts, beide in der gleichen Workgroup, ohne Domain.

Bei diesem Software internen Task scheduler kann ich keinen User und kein PW angeben. Gibt es die Möglichkeit diese Angaben in dem Script zu hinterlegen?

 

Als DOS batch mit simplem copy.exe klappt das ganze. Aber ich hätte natürlich gerne nur das Powershell script.

 

Vielen Dank fürs Lesen und ggf. auch Antworten,

 

Matthes

 

 

 

 

Link zu diesem Kommentar

...nix gegen PowerShell, aber bitte schau Dir "robocopy /?" an. Das hat alles, was Du da machen willst, schon mit dabei, arbeitet multithreaded und um Größenordnungen schneller...

 

Und wenn Du keinen User angeben kannst UND keine Domäne hast, scheiterst Du an Berechtigungen. Punkt. Ich wüßte nicht, wie Du auf einem Standalone-Rechner andere Computer berechtigen könntest. Und genau das brauchst Du...

Link zu diesem Kommentar

@daabm: Kennst Du den Rest dieses Scriptes des TO, bei dem am Ende kopiert werden soll? Oder wie kommst Du darauf, dass Robocopy alles kann, was er braucht? ;)

Ich kenne sein Script nicht und auch nicht die Datenmengen, die da kopiert werden, daher würde MIR es schwer fallen, gleich "multithreated" etc. in den Ring zu werfen... :D

Link zu diesem Kommentar

Hallo,

 

danke für eure Antworten. Ich habe es mit der Freigabe versucht, hat leider nicht funktioniert.

Mit Robocopy hätte ich ein Problem, da ich auf diesen Servern keine weitere Software haben möchte / haben darf.

 

Kurz zum Hintergrund; es handelt sich um zwei Storage Virtualisierungs Server, die ausser dieser Virtualisierungssoftware und den Servermanagmentkomponenten keine weitere Software drauf haben. Am Ende des Scriptes werden Backupfiles erstellt. Diese werden auf der Bootpartition im Ordner C:\Backup abgelegt. Hier kann man leider keinen UNC Pfad angeben.

 

Jetzt möchte ich gerne, dass nach der Erstellung der Backup-files, diese zwischen beiden Servern hin und her kopiert werden, falls ein Server mal ausfällt und wiederhergestellt werden muss.

 

Mir reicht also ein copy c:\backup\*.*   \\Server2\c$\backup\*.*

 

Wenn ich das o.g. als .bat file im Tasksheduler hinterlege, klappt das auch. Aber wenn ich das mit ...:

get-childitem -path \\DCS-LAB-1\c$\backup | Where-Object {$_.LastWriteTime -gt ((get-date).AddDays(-2))} | where-object {$_.name -match "BACKUP_"} | ForEach-Object {copy-Item $_.fullname -Destination \\DCS-LAB-2\c$\backup}

 

mache, erhalte ich eben diese Berechtigungsfehlermeldung. Aber ich möchte gerne das copy-item statt der simplen copy.exe nutzen, weil ich es erstens professioneller finde.... und zweitens ich damit dafür sorgen kann, dass nur die Files der letzten 2 Tage kopiert werden.

 

Seltsam finde ich halt, dass der Befehl in einer Powershell mit Administratorrechten durchläuft, mit dem tasksheduler aber nicht. Dabei wird da doch auch der administrator verwendet...

 

Ich hoffe ich habe euch nicht gelangweilt....

 

Matthes

Link zu diesem Kommentar

zufällig schon ;-)

 

mein Script prüft ob es bereits ein dcsbackuppath gesetzt ist, und erstellt dann das Backupscript auf der C Platte und erstellt automatisch den nötigen Datacore Task um jeden Tag das Backup zu starten. Praktisch um Kundensysteme schnell zu konfigurieren.

Jetzt fehlt halt nur noch, dass die Backupfiles zwischen beiden Datacore Servern hin und her kopiert werden....

 

Matthes

Link zu diesem Kommentar

hmm komplett ist schwierig, da immer wieder Kommentaren und interna unserer Firma drinne stehen... hier die wichtigsten Auszüge:

 

Das script erzeugt eine ps1 datei auf der C: Platte des DCS:

 

Add-Content -path $scriptfile "`$bpKey = 'BaseProductKey'"
Add-Content -path $scriptfile "`$regKey = Get-Item `"HKLM:\Software\DataCore\Executive`""
Add-Content -path $scriptfile "`$strProductKey = `$regKey.getValue(`$bpKey)"
Add-Content -path $scriptfile "`$regKey = Get-Item `"HKLM:\`$strProductKey`""
Add-Content -path $scriptfile "`$installPath = `$regKey.getValue('InstallPath')"
Add-Content -path $scriptfile "Import-Module `"`$installPath\DataCore.Executive.Cmdlets.dll`" -DisableNameChecking -ErrorAction Stop"
Add-Content -path $scriptfile "Connect-DcsServer"
Add-Content -path $scriptfile "Backup-DCSConfiguration"
Add-Content -path $scriptfile "Disconnect-DcsServer"

Add-Content -path $scriptfile "get-childitem -path \\$dcsSrvLoc`\$dcsLocBackShort | Where-Object {`$_.LastWriteTime -gt ((get-date).AddDays(-2))} | where-object {`$_.name -match `"BACKUP_`"} | ForEach-Object {copy-Item `$_.fullname -Destination \\$dcssrvrem`\$dcsRemBackShort}"
Add-Content -path $scriptfile "get-childitem -path \\$dcsSrvRem`\$dcsRemBackShort | Where-Object {`$_.LastWriteTime -gt ((get-date).AddDays(-2))} | where-object {`$_.name -match `"BACKUP_`"} | ForEach-Object {copy-Item `$_.fullname -Destination \\$dcssrvloc`\$dcslocBackShort}"

 

dann frage ich ab, ob ältere Backups gelöscht werden sollen, wenn ja ab welchem Alter (in Tagen) und füge das dazu:

 

Add-Content -path $scriptfile "get-childitem -path \\$dcsSrvLoc`\$dcsLocBackShort | Where-Object {`$_.LastWriteTime -lt ((get-date).AddDays(-$deletetag))} | where-object {`$_.name -match `"BACKUP_`"} | ForEach-Object {Remove-Item `$_.FullName -force -recurse}"
        Add-Content -path $scriptfile "get-childitem -path \\$dcsSrvRem`\$dcsRemBackShort | Where-Object {`$_.LastWriteTime -lt ((get-date).AddDays(-$deletetag))} | where-object {`$_.name -match `"BACKUP_`"} | ForEach-Object {Remove-Item `$_.FullName -force -recurse}"

 

Dann sorge ich dafür, dass der in SSY V enthaltene Taskscheduler einen Task erhält:

 

add-dcstask -Name Backuptask -Description "Durch Script erzeugter Backuptask"
Add-DcsAction -Task Backuptask -Server $dcsSrvLoc -ScriptAction PowerShell -FilePath c:\support\backup-dcs.ps1
Add-DcsTrigger -Task Backuptask -DayInterval 1 -StartTime "01/01/2014 3:56:00 PM" -SignalDuration "00:00:00"

Link zu diesem Kommentar

Schau dir mal dieses Skript an. Nicht von mir, aber es funktioniert bei vielen meiner Kunden. *klick* Es muss nur auf einem Storage Server ausgeführt werden, es funktioniert per Windows Scheduler und am Ende kannst du gerne einen Eintrag reinmachen, der dir das aktuellste CAB File irgendwohin kopiert. Es ist aber auch völlig okay auf den Storage Server robocopy (es ist bei 2012 eh dabei...) zu nutzen oder einen Backupagent eurer Backupsoftware zu installieren.

 

Wenn du den internen Scheduler verwendest, dann läuft der Task übrigens als DcsAdmin, nicht als Administrator. Das erklärt warum es bei dir als Admin funktioniert, aus dem Scheduler heraus aber nicht.

bearbeitet von DocData
Link zu diesem Kommentar

Sollte IMHO so sein, habe gerade keine Maschine hier um das zu testen. Ich bin mir aber relativ sicher das es so ist. Daher würde ich den integrierten Windows Scheduler verwenden. Wie gesagt: Das Skript muss nur auf einem der Server in der Gruppe ausgeführt werden. Das Backup wird auf jeder Maschine unter C:\\SSVBACKUP abgelegt. Theoretisch kann der Aufruf des Skriptes sogar von einem Client aus erfolgen, so dass auf dem Server nur das Backupfile abgeholt werden muss. Eine Dateirotation hat das Skript auch. Da hat sich der Autor Mühe gegeben!

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...