Jump to content

matthes74

Members
  • Gesamte Inhalte

    12
  • Registriert seit

  • Letzter Besuch

Fortschritt von matthes74

Explorer

Explorer (4/14)

  • Erste Antwort
  • Engagiert
  • Erster eigener Beitrag
  • Eine Woche dabei
  • Einen Monat dabei

Neueste Abzeichen

0

Reputation in der Community

  1. vielen Dank!! hat jetzt wunderbar funktioniert.
  2. vielen Dank, ich erhalte folgende Meldung: $var = get-content 2k-randrw.txt | Select-String "iops" ($var.Split(",") | Select-String -Pattern "iops").toString().split("=")[1] Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'Split'. At line:2 char:1 + ($var.Split(",") | Select-String -Pattern "iops").toString().split("=")[1] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: ( :) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound Warum wird die split methode nicht akzeptiert. für jeden Tipp dankbar, Matthes. Hi, mit erhalte ich nun zumindest schon mal iops=187 Jetzt müsste nur noch "iops=" weg.... aha...: Vielen Dank!!! PS.: wenn es eleganter geht, bitte thread updaten....
  3. Hi, knobel grade an etwas und komme schnell an meine Grenzen :( aus diesem text: "(groupid=0, jobs=1): err= 0: pid=4768: Thu Mar 10 15:51:14 2016 read : io=3790.0KB, bw=384786B/s, iops=187, runt= 10086msec slat (usec): min=6, max=27, avg= 8.62, stdev= 1.42" möchte ich gerne den Wert iops auslesen. in dem o.g. text wäre jetzt z.B. der Wert 187. Es handelt sich um eine Performanceauswertung von Datenträgern, weshalb der Wert halt, je nach Güte der Disk, variiert. Bei Flash erhalte ich auch 6 stellige IO Werte. Ich möchte als Wert die Zahl haben, hier also die 187. Kann mir jemand helfen?? Danke und Grüße, Matthes
  4. sehr interessant und hilfreich, danke dir! Danke auch für den Hinweis mit dem dcsadmin, hatte das nicht auf dem Schirm, das dieser User den Task ausführt.
  5. 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"
  6. 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
  7. 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
  8. 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
  9. Hallo Frank, vielen Dank, hast mir sehr geholfen, hat funktioniert! :thumb1: Matthes
  10. Hi, ich habe probleme mit meinem Script. Auf einem aktuellem Windows Host läuft es, auf einem mit älterem Patchstand nicht, s.u. mit Powershell Version 4 auf W2012R2 bekomme ich mit folgendem cmdlet folgende Antwort (bitte achtet nicht auf das "Get-DcsPool", ist ein cmdlet des Softwareanbieters, sollte ja erstmal egal sein): Get-DcsPool -Pool DX80-test_dcs2 | Get-DcsPerformanceCounter | foreach BytesTotal 0 mit Powershell Version2 auf W2008R2 sieht das ganze so aus: Get-DcsPool -Pool DS8700 | Get-DcsPerformanceCounter | foreach BytesTotal ForEach-Object : Cannot bind parameter 'Process'. Cannot convert the "BytesTotal" value of type "System.String" to type "System.Management. Automation.ScriptBlock". At line:1 char:63 + Get-DcsPool -Pool DS8700 | Get-DcsPerformanceCounter | foreach <<<< BytesTotal + CategoryInfo : InvalidArgument: (:) [ForEach-Object], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.ForEachObjectCommand Jetzt weiß ich nicht, wie ich da an den Wert komme. Wenn ich eine where-object Abfrage statt dem foreach verwende, bekomme ich zwar meine BytesTotal angezeigt, aber leider nicht nur den Wert, sondern auch BytesTotal: BytesTotal ------ 0 und damit kann ich nat. in meinem Script nichts anfangen. ich brauche nur die Zahl als Ergebnis. wer kann mir helfen? Vielen Dank schon mal und Grüße, Matthes
  11. Hi ducke, vielen Dank, ich bin sehr gespannt drauf das jetzt gleich zu testen und zu verstehen ;-) Ich melde mich danach. Matthes die zweite Variante gefällt mir erstmal am besten. konnte das gut umsetzen und verstehen und zumindest werden nur Zahlen akzeptiert. tryparseexact hat sicher noch mehr Vorteile, da Fehler aufgedeckt werden, ist mir aber noch zu hoch. Vielen Dank nochmal für deine Mühen, du hast mir echt weiter geholfen! Matthes.
  12. Hi, ich habe foldene Zahlenkette: 201306120817 Das wäre Jahr: 2013 Tag: 06 Monat: 12 Stunde: 08 Minute: 17 Jetzt würde ich gerne einen split der Zahlenkette durchführen, die ersten 4 Stellen = Jahr, Stelle 5 und 6 = Monat, ... Brauche die einzelnen Werte in Variabeln, also $Jahr, $Monat, $Tag, $Stunde, $Minute, aber in einer Zeile, Also so: $Jahr > 2013 nicht: $Jahr > 2 0 1 3 sorry, falls die Frage doof ist, bin neu hier ;-) Ich bin für jeden Tip dankbar! Matthes
×
×
  • Neu erstellen...