PowerShell 명령을 Perl으로 변환할 때의 고려 사항
PowerShell 및 Perl의 기능은 다르므로 PowerShell 명령을 Perl으로 변환할 때 고려해야 할 중요한 사항에 대해 알고 있어야 합니다.
명령 입력 유형
WFA(OnCommand Workflow Automation)를 사용하면 워크플로우 설계자가 명령을 정의할 때 명령에 대한 입력으로 어레이 및 해시를 사용할 수 있습니다. 이 입력 유형은 명령이 Perl을 사용하여 정의된 경우 사용할 수 없습니다. Perl 명령이 배열 및 해시 입력을 허용하도록 하려면 디자이너에서 입력을 문자열로 정의할 수 있습니다. 그런 다음 명령 정의를 통해 입력을 구문 분석할 수 있습니다. 이 입력은 필요에 따라 배열 또는 해시를 만들기 위해 전달됩니다. 입력에 대한 설명은 입력이 필요한 형식을 설명합니다.
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 명령문
다음 예에서는 스토리지 입력을 PowerShell 및 Perl로 전달하는 방법을 보여 줍니다. 이 예에서는 Cron 작업이 실행되도록 예약된 월을 지정하는 CronMonth 입력을 설명합니다. 유효한 값은 -1에서 11 사이의 정수입니다. 값이 -1이면 스케줄이 매달 실행됨을 나타냅니다. 다른 값은 특정 월을 나타내며 0은 1월, 11은 12월입니다.
[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 진술
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 }
명령 정의
PowerShell에서 파이프 연산자를 사용하는 한 줄 식은 동일한 기능을 구현하기 위해 Perl의 여러 문 블록으로 확장해야 할 수도 있습니다. 다음 표에는 대기 명령 중 하나의 예가 나와 있습니다.
PowerShell 명령문 | Perl 진술 |
---|---|
# 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) } } |