2008-08-18 34 views
13

Làm cách nào để chuyển đổi các thông số đầu vào chức năng thành đúng loại?Làm cách nào để thực hiện thay thế chuỗi trong chức năng PowerShell?

Tôi muốn trả về một chuỗi có một phần của URL được chuyển vào nó đã bị xóa.

này hoạt động, nhưng nó sử dụng một mã hóa cứng chuỗi:

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

$SiteName = CleanUrl($HostHeader) 
echo $SiteName 

này thất bại:

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

Trả lời

15

Khái niệm ở đây là chính xác.

Sự cố xảy ra với tên biến mà bạn đã chọn. $ đầu vào là một biến dành riêng được sử dụng bởi PowerShell để đại diện cho một mảng đầu vào đường ống. Nếu bạn thay đổi tên biến, bạn sẽ không gặp bất kỳ vấn đề gì.

PowerShell không có a replace operator, vì vậy bạn có thể thực hiện chức năng của bạn vào

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

này đã làm việc cho tôi:

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

Không sử dụng biến đầu vào $. Nó được bảo lưu. – luccio

15

công trình câu trả lời của Steve. Vấn đề với nỗ lực của bạn để tái tạo kịch bản ESV là bạn đang sử dụng $input, là một biến dành riêng (nó tự động thu thập nhiều đầu vào đường ống vào một biến duy nhất).

Tuy nhiên, bạn nên sử dụng .Replace() trừ khi bạn cần (các) tính năng bổ sung của -replace (nó xử lý cụm từ thông dụng, v.v.).

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

Điều đó sẽ làm việc, nhưng như vậy sẽ:

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

Ngoài ra, khi bạn gọi một hàm PowerShell, không sử dụng dấu ngoặc đơn:

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

Hy vọng rằng sẽ giúp. Nhân tiện, để chứng minh đầu vào $:

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

# Notice these are arrays ... 
$HostHeaders = @("http://google.com","http://stackoverflow.com") 
$SiteNames = $HostHeader | CleanUrls 
Write-Output $SiteNames 
Các vấn đề liên quan