Skip to main content
OnCommand Workflow Automation 5.0
Eine neuere Version dieses Produkts ist erhältlich.
Die deutsche Sprachversion wurde als Serviceleistung für Sie durch maschinelle Übersetzung erstellt. Bei eventuellen Unstimmigkeiten hat die englische Sprachversion Vorrang.

Überlegungen beim Konvertieren von PowerShell-Befehlen in Perl

Beitragende

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)
	}
}