17

関数の入力パラメーターを正しい型に変換するにはどうすればよいですか?

渡された 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://", "")
4

4 に答える 4

18

スティーブの答えはうまくいきます。ESVのスクリプトを再現しようとする際の問題$inputは、予約変数であるを使用していることです(これは、複数のパイプ入力を1つの変数に自動的に収集します)。

ただし、-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
于 2008-09-16T02:12:17.660 に答える
16

ここのコンセプトは正しいです。

問題は、選択した変数名にあります。$input は、パイプライン入力の配列を表すために PowerShell によって使用される予約変数です。変数名を変更しても問題はありません。

PowerShell にはreplace operator があるため、関数を次のようにすることができます。

function CleanUrl($url)
{
    return $url -replace 'http://'
}
于 2008-08-18T19:50:39.350 に答える
5
function CleanUrl([string] $url)
{
    return $url.Replace("http://", "")
}
于 2008-08-18T18:42:33.730 に答える
-4

これは私のために働いた:

function CleanUrl($input)
{
    return $input.Replace("http://", "")
}
于 2008-08-18T19:08:40.353 に答える