构建 URL 字符串
Build URL string
试图用一个变量和一个字符串构建一个 link,但我总是在它们之间得到一个 space。我该如何解决这个问题?
$sub
是来自共享点的 SPWeb
对象。
Write-Host $sub.Url "/default.aspx"
结果:
https://intra.mycompany/pages/sales /default.aspx
将 $sub
变量放在字符串文字中,以便将其视为一个字符串:
Write-Host "$($sub.Url)/default.aspx"
请注意,您需要使用 sub expression operator $(...)
,因为您正在访问 $sub
的属性。
根据字符串的复杂程度,另一种方法是使用 -f
format operator:
Write-Host ("{0}/default.aspx" -f $sub.Url)
如果您需要插入许多变量,它可以使代码更清晰、更易于阅读。
使用 URL
class' 构造函数进行连接,而不是使用字符串操作。这将具有自动处理附加任何所需斜线的额外优势。
function Join-Uri {
[CmdletBinding()]
param (
[Alias('Path','BaseUri')] #aliases so naming is consistent with Join-Path and .Net's constructor
[Parameter(Mandatory)]
[System.Uri]$Uri
,
[Alias('ChildPath')] #alias so naming is consistent with Join-Path
[Parameter(Mandatory,ValueFromPipeline)]
[string]$RelativeUri
)
process {
(New-Object -TypeName 'System.Uri' -ArgumentList $Uri,$RelativeUri)
#the above returns a URI object; if we only want the string:
#(New-Object -TypeName 'System.Uri' -ArgumentList $Uri,$RelativeUri).AbsoluteUri
}
}
$sub = new-object -TypeName PSObject -Property @{Url='http://demo'}
write-host 'Basic Demo' -ForegroundColor 'cyan'
write-host (Join-Uri $sub.Url '/default.aspx')
write-host (Join-Uri $sub.Url 'default.aspx') #NB: above we included the leading slash; here we don't; yet the output's consistent
#you can also easily do this en-masse; e.g.
write-host 'Extended Demo' -ForegroundColor 'cyan'
@('default.aspx','index.htm','helloWorld.aspx') | Join-Uri $sub.Url | select-object -ExpandProperty AbsoluteUri
上面我创建了一个函数来包装这个功能;但您也可以轻松地执行以下操作:
[string]$url = (new-object -TypeName 'System.Uri' -ArgumentList ([System.Uri]'http://test'),'me').AbsoluteUri
Link 相关文档:https://msdn.microsoft.com/en-us/library/9hst1w91(v=vs.110).aspx
试图用一个变量和一个字符串构建一个 link,但我总是在它们之间得到一个 space。我该如何解决这个问题?
$sub
是来自共享点的 SPWeb
对象。
Write-Host $sub.Url "/default.aspx"
结果:
https://intra.mycompany/pages/sales /default.aspx
将 $sub
变量放在字符串文字中,以便将其视为一个字符串:
Write-Host "$($sub.Url)/default.aspx"
请注意,您需要使用 sub expression operator $(...)
,因为您正在访问 $sub
的属性。
根据字符串的复杂程度,另一种方法是使用 -f
format operator:
Write-Host ("{0}/default.aspx" -f $sub.Url)
如果您需要插入许多变量,它可以使代码更清晰、更易于阅读。
使用 URL
class' 构造函数进行连接,而不是使用字符串操作。这将具有自动处理附加任何所需斜线的额外优势。
function Join-Uri {
[CmdletBinding()]
param (
[Alias('Path','BaseUri')] #aliases so naming is consistent with Join-Path and .Net's constructor
[Parameter(Mandatory)]
[System.Uri]$Uri
,
[Alias('ChildPath')] #alias so naming is consistent with Join-Path
[Parameter(Mandatory,ValueFromPipeline)]
[string]$RelativeUri
)
process {
(New-Object -TypeName 'System.Uri' -ArgumentList $Uri,$RelativeUri)
#the above returns a URI object; if we only want the string:
#(New-Object -TypeName 'System.Uri' -ArgumentList $Uri,$RelativeUri).AbsoluteUri
}
}
$sub = new-object -TypeName PSObject -Property @{Url='http://demo'}
write-host 'Basic Demo' -ForegroundColor 'cyan'
write-host (Join-Uri $sub.Url '/default.aspx')
write-host (Join-Uri $sub.Url 'default.aspx') #NB: above we included the leading slash; here we don't; yet the output's consistent
#you can also easily do this en-masse; e.g.
write-host 'Extended Demo' -ForegroundColor 'cyan'
@('default.aspx','index.htm','helloWorld.aspx') | Join-Uri $sub.Url | select-object -ExpandProperty AbsoluteUri
上面我创建了一个函数来包装这个功能;但您也可以轻松地执行以下操作:
[string]$url = (new-object -TypeName 'System.Uri' -ArgumentList ([System.Uri]'http://test'),'me').AbsoluteUri
Link 相关文档:https://msdn.microsoft.com/en-us/library/9hst1w91(v=vs.110).aspx