Überlegungen beim Konvertieren von PowerShell-Befehlen in Perl
Bei der Konvertierung von PowerShell Befehlen in Perl müssen Sie bestimmte wichtige Überlegungen beachten, da PowerShell und Perl über verschiedene Funktionen verfügen.
Eingabearten für Befehle
OnCommand Workflow Automation (WFA) ermöglicht Workflow-Designern bei der Definition eines Befehls die Verwendung von Arrays und Hash als Eingabe für den Befehl. Diese Eingabetypen können nicht verwendet werden, wenn der Befehl über Perl definiert ist. Wenn ein Perl-Befehl Array- und Hash-Eingaben akzeptieren soll, können Sie die Eingabe als Zeichenfolge im Designer definieren. Die Befehlsdefinition kann dann die Eingabe analysieren, die nach Bedarf an die Erstellung eines Arrays oder Hash übergeben wird. Die Beschreibung der Eingabe beschreibt das Format, in dem die Eingabe erwartet wird.
my @input_as_array = split(',', $InputString); #Parse the input string of format val1,val2 into an array my %input_as_hash = split /[;=]/, $InputString; #Parse the input string of format key1=val1;key2=val2 into a hash.
PowerShell Aussage
Die folgenden Beispiele zeigen, wie eine Array-Eingabe an PowerShell und Perl übergeben werden kann. Die Beispiele beschreiben den Input CronMonth, der den Monat angibt, in dem der Cron-Job ausgeführt werden soll. Die gültigen Werte sind ganze Zahlen -1 bis 11. Ein Wert von -1 zeigt an, dass der Zeitplan jeden Monat ausgeführt wird. Jeder andere Wert bezeichnet einen bestimmten Monat, wobei 0 Januar und 11 Dezember ist.
[parameter(Mandatory=$false, HelpMessage="Months in which the schedule executes. This is a comma separated list of values from 0 through 11. Value -1 means all months.")] [ValidateRange(-1, 11)] [array]$CronMonths,
Perl-Anweisung
GetOptions( "Cluster=s" => \$Cluster, "ScheduleName=s" => \$ScheduleName, "Type=s" => \$Type, "CronMonths=s" => \$CronMonths, ) or die 'Illegal command parameters\n'; sub get_cron_months { return get_cron_input_hash('CronMonths', $CronMonths, 'cron-month', -1, 11); } sub get_cron_input_hash { my $input_name = shift; my $input_value = shift; my $zapi_element = shift; my $low = shift; my $high = shift; my $exclude = shift; if (!defined $input_value) { return undef; } my @values = split(',', $input_value); foreach my $val (@values) { if ($val !~ /^[+-]?\d+$/) { die "Invalid value '$input_value' for $input_name: $val must be an integer.\n"; } if ($val < $low || $val > $high) { die "Invalid value '$input_value' for $input_name: $val must be from $low to $high.\n"; } if (defined $exclude && $val == $exclude) { die "Invalid value '$input_value' for $input_name: $val is not valid.\n"; } } # do something }
Befehlsdefinition
Ein einzeilter Ausdruck in PowerShell, der einen Pipe Operator verwendet, muss in Perl in mehrere Blöcke von Anweisungen erweitert werden, um dieselbe Funktionalität zu erreichen. Die folgende Tabelle enthält ein Beispiel für einen der Wartebefehle.
PowerShell Aussage | Perl-Anweisung |
---|---|
# Get the latest job which moves the specified volume to the specified aggregate. $job = Get-NcJob -Query $query |
where {$_.JobDescription -eq "Split" + $VolumeCloneName} |
Select-Object -First 1 ---- |
my $result = $server->job_get_iter( 'query' => {'job-type' => 'VOL_CLONE_SPLIT'}, 'desired-attributes' => { 'job-type' => '', 'job-description' => '', 'job-progress' => '', 'job-state' => '' } ); my @jobarray; for my $job (@{ $result->{'attributes-list'}}) { my $description = $job->{'job-description'}; if($description =~ /$VolumeCloneName/) { push(@jobarray, $job) } } |