BpDk 0 Geschrieben 10. April 2017 Melden Teilen Geschrieben 10. April 2017 (bearbeitet) Hallo Leute, gibt es die Möglichkeit den Befehl "Get-VM" so zu parsen, dass die Ausgabe in folgender Syntax ist? "VM-Name," "VM-Name", ...... Ich würde gerne mein Veeam Backup Skript dynamisch aufbauen, damit das Skript nicht jedes mal bei einer VM-Neuanlage angepasst werden muss. Vielen Dank, BpDK bearbeitet 10. April 2017 von BpDk Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 10. April 2017 Melden Teilen Geschrieben 10. April 2017 Moin, "parsen" im engeren Sinne ist das nicht, was du vorhast, aber ein simpler Weg wäre dieser: $Ausgabe = '' $VMs = (Get-VM) foreach ($VM in $VMs) { $Ausgabe = $Ausgabe + '"' + $VM.Name + '",' } $Ausgabe.TrimEnd(',') Gruß, Nils 1 Zitieren Link zu diesem Kommentar
BpDk 0 Geschrieben 10. April 2017 Autor Melden Teilen Geschrieben 10. April 2017 Moin, "parsen" im engeren Sinne ist das nicht, was du vorhast, aber ein simpler Weg wäre dieser: $Ausgabe = '' $VMs = (Get-VM) foreach ($VM in $VMs) { $Ausgabe = $Ausgabe + '"' + $VM.Name + '",' } $Ausgabe.TrimEnd(',') Gruß, Nils Vielen Dank für deine schnelle Hilfe!!! Leider gibt mir der Code nichts aus, wenn ich diesen am Hyper-V Host ausführe. Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 10. April 2017 Melden Teilen Geschrieben 10. April 2017 Leider gibt mir der Code nichts aus, wenn ich diesen am Hyper-V Host ausführe. Als "Admin" ausgeführt? Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 10. April 2017 Melden Teilen Geschrieben 10. April 2017 Moin, du hast die PowerShell (besser die PowerShell ISE) ausdrücklich als Admin gestartet? Gruß, Nils Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 10. April 2017 Melden Teilen Geschrieben 10. April 2017 Hallo Leute, gibt es die Möglichkeit den Befehl "Get-VM" so zu parsen, dass die Ausgabe in folgender Syntax ist? "VM-Name," "VM-Name", ...... Ich würde gerne mein Veeam Backup Skript dynamisch aufbauen, damit das Skript nicht jedes mal bei einer VM-Neuanlage angepasst werden muss. Vielen Dank, BpDK Oder kürzer als Nils :p : ( get-vm | Select-Object -ExpandProperty Name ) -join ',' Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 10. April 2017 Melden Teilen Geschrieben 10. April 2017 Moin, daran hatte ich auch erst gedacht, aber da fehlen dann die Anführungsstriche. Wenn man Leerzeichen oder Sonderzeichen im VM-Namen hat, kann es dann sein, dass Veeam damit nicht umgehen kann. Daher der Umstand mit der Schleife. Gruß, Nils PS. wenn man bei Einzeilern bleiben möchte, könnte man es schmutzig aber auch so machen: '"' + (( get-vm | Select-Object -ExpandProperty Name ) -join '","') + '"' 2 Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 10. April 2017 Melden Teilen Geschrieben 10. April 2017 PS. wenn man bei Einzeilern bleiben möchte, könnte man es schmutzig aber auch so machen: '"' + (( get-vm | Select-Object -ExpandProperty Name ) -join '","') + '"' Quck and dirty :D Ich hab beim Programmieren / Skripten letztlich gemerkt, dass quick and dirty im Endeffekt mehr arbeit macht. Letztlich beim debuggen oder anpassen geht dann die Zeit die man sich gespart hat wieder flöten. Zitieren Link zu diesem Kommentar
BpDk 0 Geschrieben 10. April 2017 Autor Melden Teilen Geschrieben 10. April 2017 Ist mir fast peinlich, aber ja läuft nun. Ich bedanke mich bei allen für die schnelle Hilfe. Moin, daran hatte ich auch erst gedacht, aber da fehlen dann die Anführungsstriche. Wenn man Leerzeichen oder Sonderzeichen im VM-Namen hat, kann es dann sein, dass Veeam damit nicht umgehen kann. Daher der Umstand mit der Schleife. Gruß, Nils PS. wenn man bei Einzeilern bleiben möchte, könnte man es schmutzig aber auch so machen: '"' + (( get-vm | Select-Object -ExpandProperty Name ) -join '","') + '"' Nur dass ich es auch verstehe. Was macht hier genau der Parameter -join? Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 10. April 2017 Melden Teilen Geschrieben 10. April 2017 Nur dass ich es auch verstehe. Was macht hier genau der Parameter -join? Die Ausgabe aus Select-Object ist in diesem Fall ein String-Array. Dieses Array kannst du mit "-join" auflösen und wieder in einen String verwandeln. Das "," besagt nur, dass die Objekte beim zusammenfügen in einen String durch ein Komma getrennt werden. About_Join | Technet https://technet.microsoft.com/de-de/library/hh847757.aspx Zitieren Link zu diesem Kommentar
BpDk 0 Geschrieben 13. April 2017 Autor Melden Teilen Geschrieben 13. April 2017 Vielen Dank für euer Feedback. Kennt sich jemand zufällig mit Veeam Backup & Replication aus und sichert seine VMs damit? Meine Intention war eigentlich das Powershell Skript so anzupassen, dass die vorhandenen VM's automatisch ermittelt werden. Leider funktioniert das nicht so einfach, wie ich ich mir das vorgestellt hatte. Jemand ein Tipp? # Author: Vladimir Eremin # Created Date: 3/24/2015 # http://forums.veeam.com/member31097.html # ################################################################## # User Defined Variables ################################################################## # Names of VMs to backup separated by comma (Mandatory). For instance, $VMNames = “VM1”,”VM2” $Ausgabe = '' $VMs = (Get-VM) foreach ($VM in $VMs) { $Ausgabe = $Ausgabe + '"' + $VM.Name + '",' } $VMNames = $Ausgabe.trimEnd(',') # Name of vCenter or standalone host VMs to backup reside on (Mandatory) $HostName = "DMZ01" # Directory that VM backups should go to (Mandatory; for instance, C:\Backup) $Directory = "F:\HyperV" # Desired compression level (Optional; Possible values: 0 - None, 4 - Dedupe-friendly, 5 - Optimal, 6 - High, 9 - Extreme) $CompressionLevel = "5" # Quiesce VM when taking snapshot (Optional; VMware Tools are required; Possible values: $True/$False) $EnableQuiescence = $True # Protect resulting backup with encryption key (Optional; $True/$False) $EnableEncryption = $False # Encryption Key (Optional; path to a secure string) $EncryptionKey = "" # Retention settings (Optional; By default, VeeamZIP files are not removed and kept in the specified location for an indefinite period of time. # Possible values: Never , Tonight, TomorrowNight, In3days, In1Week, In2Weeks, In1Month) $Retention = "Never" ################################################################## # Notification Settings ################################################################## # Enable notification (Optional) $EnableNotification = $false # Email SMTP server $SMTPServer = "" # Email FROM $EmailFrom = "" # Email TO $EmailTo = "" # Email subject $EmailSubject = "HyperV Backup" ################################################################## # Email formatting ################################################################## $style = "<style>BODY{font-family: Arial; font-size: 10pt;}" $style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}" $style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }" $style = $style + "TD{border: 1px solid black; padding: 5px; }" $style = $style + "</style>" ################################################################## # End User Defined Variables ################################################################## #################### DO NOT MODIFY PAST THIS LINE ################ Asnp VeeamPSSnapin $Server = Get-VBRServer -name $HostName $MesssagyBody = @() foreach ($VMName in $VMNames) { $VM = Find-VBRHvEntity -Name $VMName -Server $Server If ($EnableEncryption) { $EncryptionKey = Add-VBREncryptionKey -Password (cat $EncryptionKey | ConvertTo-SecureString) $ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $CompressionLevel -DisableQuiesce:(!$EnableQuiescence) -AutoDelete $Retention -EncryptionKey $EncryptionKey } Else { $ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $CompressionLevel -DisableQuiesce:(!$EnableQuiescence) -AutoDelete $Retention } If ($EnableNotification) { $TaskSessions = $ZIPSession.GetTaskSessions().logger.getlog().updatedrecords $FailedSessions = $TaskSessions | where {$_.status -eq "EWarning" -or $_.Status -eq "EFailed"} if ($FailedSessions -ne $Null) { $MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={$FailedSessions.Title}}) } Else { $MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={($TaskSessions | sort creationtime -Descending | select -first 1).Title}}) } } } If ($EnableNotification) { $Message = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo $Message.Subject = $EmailSubject $Message.IsBodyHTML = $True $message.Body = $MesssagyBody | ConvertTo-Html -head $style | Out-String $SMTP = New-Object Net.Mail.SmtpClient($SMTPServer) $SMTP.Send($Message) } Folgende Fehlermeldung erhalte ich: Start-VBRZip : Das Argument für den Parameter "Entity" kann nicht überprüft werden. Das Argument ist NULL. Geben Sie einen gültigen Wert für das Argument an, und führen Sie den Befehl erneut aus. In C:\Users\Administrator\Desktop\Veeam_Backup.ps1:92 Zeichen:40 + $ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $Comp ... + ~~~ + CategoryInfo : InvalidData: (:) [Start-VBRZip], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Veeam.Backup.PowerShell.Cmdlets.StartVBRZip Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat. In C:\Users\Administrator\Desktop\Veeam_Backup.ps1:97 Zeichen:5 + $TaskSessions = $ZIPSession.GetTaskSessions().logger.getlog().updatedrecords + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Ausnahme beim Aufrufen von "Send" mit 1 Argument(en): "Fehler beim Senden von Mail." In C:\Users\Administrator\Desktop\Veeam_Backup.ps1:119 Zeichen:1 + $SMTP.Send($Message) + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SmtpException Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 13. April 2017 Melden Teilen Geschrieben 13. April 2017 Nutzt du die Freie Veeam Version oder warum musst du per Powershell die VM's zusammensuchen? Kannst du das Script debuggen (z.B. mit der ISE) und dir anschauen, was in den Variablen steht? Zitieren Link zu diesem Kommentar
monstermania 53 Geschrieben 13. April 2017 Melden Teilen Geschrieben 13. April 2017 Kennt sich jemand zufällig mit Veeam Backup & Replication aus und sichert seine VMs damit? Meine Intention war eigentlich das Powershell Skript so anzupassen, dass die vorhandenen VM's automatisch ermittelt werden. Ja, wir nutzen hier Veam B&R um unsere VM damit zu sichern. Aber Scripten (Veeam) mussten wir bisher fast nie. Wir haben die einzelnen VM in Ordnern gruppiert (VMWare). Z.B. Email, Datenbank, Testsysteme, usw. Die Veeam-Jobs sind auf die Gruppen eingerichtet. Kommt also eine neue VM in die Gruppe Datenbank hinzu wird diese automatisch beim nächsten Veeam-Job für diese Gruppe mitgesichert. Läuft Alles ohne Scripten! Gruß Dirk Zitieren Link zu diesem Kommentar
BpDk 0 Geschrieben 13. April 2017 Autor Melden Teilen Geschrieben 13. April 2017 Ja, wir nutzen hier Veam B&R um unsere VM damit zu sichern. Aber Scripten (Veeam) mussten wir bisher fast nie. Wir haben die einzelnen VM in Ordnern gruppiert (VMWare). Z.B. Email, Datenbank, Testsysteme, usw. Die Veeam-Jobs sind auf die Gruppen eingerichtet. Kommt also eine neue VM in die Gruppe Datenbank hinzu wird diese automatisch beim nächsten Veeam-Job für diese Gruppe mitgesichert. Läuft Alles ohne Scripten! Gruß Dirk Da wir die freie Version nutzen (für uns aktuell vollkommen ausreichend) müssen wir mit Script und Tasks arbeiten um automatisch zu sichern. Nutzt du die Freie Veeam Version oder warum musst du per Powershell die VM's zusammensuchen? Kannst du das Script debuggen (z.B. mit der ISE) und dir anschauen, was in den Variablen steht? Hallo Dukel, die Variable "Ausgabe" enthält alle VM's in der gewünschtgen Syntax ("VM01, "VM02", .....). Quasi wie, wenn ich der Variable feste Werte zuweise. :confused: Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 13. April 2017 Melden Teilen Geschrieben 13. April 2017 In der Fehlermeldung wird die Variable "VM" bemängelt und nicht "Ausgabe". Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.