PowerShell 関数で文字列を置換するにはどうすればよいですか?
-
08-06-2019 - |
質問
関数の入力パラメータを正しい型に変換するにはどうすればよいですか?
渡された 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 によって使用される予約変数です。変数名を変更しても問題はありません。
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://", "")
}
所属していません StackOverflow