2008-08-18 2 views
13

함수 입력 매개 변수를 올바른 유형으로 변환하려면 어떻게해야합니까?PowerShell 함수에서 문자열 바꾸기를 수행하려면 어떻게해야합니까?

전달 된 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://", "") 

답변

15

개념이 정확합니다.

문제는 선택한 변수 이름에 있습니다. $ input은 파이프 라인 입력 배열을 나타 내기 위해 PowerShell에서 사용하는 예약 된 변수입니다. 변수 이름을 변경하면 아무런 문제가 없어야합니다.

PowerShell은 a replace operator이 있는가, 그래서 당신은

function CleanUrl($url) 
{ 
    return $url -replace 'http://' 
} 
5
function CleanUrl([string] $url) 
{ 
    return $url.Replace("http://", "") 
} 
-4

이 나를 위해 일을 :

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

$ 입력 변수를 사용하지 마십시오. 그것은 예약되어 있습니다. – luccio

15

스티브의 대답은 작품에 함수를 만들 수 있습니다. ESV의 스크립트를 재현하려는 시도는 예약 변수 (단일 변수로 여러 파이프 입력을 자동으로 수집 함) 인 $input을 사용하고 있다는 점에서 문제가 있습니다.

-replace (정규 표현식을 처리하는 등)의 추가 기능이 필요하지 않으면 .Replace()를 사용해야합니다.

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

희망하는 데 도움이 : 당신이 PowerShell에서 함수를 호출 할 때

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

은 또한, 괄호를 사용하지 마십시오 작동하지만 그렇게하고자합니다

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

. 그건 그렇고, $ 입력 변수를 사용하지 마십시오 :

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

# Notice these are arrays ... 
$HostHeaders = @("http://google.com","http://stackoverflow.com") 
$SiteNames = $HostHeader | CleanUrls 
Write-Output $SiteNames 
관련 문제