سؤال

كيف يمكنني تحويل معلمات إدخال الوظيفة إلى النوع الصحيح؟

أريد إرجاع سلسلة تمت إزالة جزء من عنوان URL الذي تم تمريره إليه.

يعمل هذا، ولكنه يستخدم سلسلة مشفرة بشكل ثابت:

function CleanUrl($input)
{
    $x = "http://google.com".Replace("http://", "")
    return $x
}

$SiteName = CleanUrl($HostHeader)
echo $SiteName

هذا يفشل:

function CleanUrl($input)
{
    $x = $input.Replace("http://", "")
    return $x
}

Method invocation failed because [System.Array+SZArrayEnumerator] doesn't contain a method named 'Replace'.
At M:\PowerShell\test.ps1:13 char:21
+     $x = $input.Replace( <<<< "http://", "")
هل كانت مفيدة؟

المحلول

المفهوم هنا صحيح

المشكلة هي في اسم المتغير الذي اخترته.$input هو متغير محجوز يستخدمه PowerShell لتمثيل مجموعة من مدخلات خط الأنابيب.إذا قمت بتغيير اسم المتغير الخاص بك، فلن تواجه أي مشكلة.

بوويرشيل لديه عامل استبدال, ، حتى تتمكن من تحويل وظيفتك إلى

function CleanUrl($url)
{
    return $url -replace 'http://'
}

نصائح أخرى

إجابة ستيف تعمل.المشكلة في محاولتك إعادة إنتاج البرنامج النصي لـ ESV هي أنك تستخدمه $input, ، وهو متغير محجوز (يقوم تلقائيًا بتجميع مدخلات متعددة عبر الأنابيب في متغير واحد).

ومع ذلك، يجب عليك استخدام .Replace() إلا إذا كنت بحاجة إلى الميزة (الميزات) الإضافية لـ -replace (فهي تتعامل مع التعبيرات العادية، وما إلى ذلك).

function CleanUrl([string]$url)
{
    $url.Replace("http://","")
}

سوف ينجح ذلك، لكن الأمر كذلك:

function CleanUrl([string]$url)
{
    $url -replace "http://",""
}

وأيضًا، عند استدعاء وظيفة PowerShell، لا تستخدم الأقواس:

$HostHeader = "http://google.com"
$SiteName = CleanUrl $HostHeader
Write-Host $SiteName

امل ان يساعد.بالمناسبة، لإظهار $input:

function CleanUrls
{
    $input -replace "http://",""
}

# Notice these are arrays ...
$HostHeaders = @("http://google.com","http://stackoverflow.com")
$SiteNames = $HostHeader | CleanUrls
Write-Output $SiteNames
function CleanUrl([string] $url)
{
    return $url.Replace("http://", "")
}

لقد نجح هذا بالنسبة لي:

function CleanUrl($input)
{
    return $input.Replace("http://", "")
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top