PowerShell拆分路径无法与IIS:驱动器限定符一起正常工作

时间:2013-10-23 17:07:29

标签: iis powershell path split

我正在使用PowerShell v3.0和IIS Administration Cmdlets在我的IIS 7实例中添加和删除网站。我使用 Import-Module WebAdministration 来确保IIS:驱动器可用,并且我可以使用Remove-Item通过IIS:驱动器删除文件。出于某种原因,虽然当我使用以下代码时,Split-Path总是返回一个空字符串,即使Remove-Item工作正常。

$iisPath = Join-Path "IIS:\Sites" $fullPath
Remove-Item -Path $iisPath
$parent = Split-Path -Path $iisPath -Parent

即使我注释掉Remove-Item行,Split-Path仍会返回一个空字符串。 $ iisPath值看起来像这样:

IIS:\Sites\Application Services\2.5.12\OurProductServicesDirectory

所以我希望$ parent包含:

IIS:\Sites\Application Services\2.5.12

但是$ parent总是空的。我还尝试使用 $ iisPath =“IIS:\ Sites \ $ fullPath”而不是Join-Path创建$ iisPath,但仍然得到相同的结果。

使用IIS:驱动器或如何修复它时,任何想法为什么Split-Path似乎不起作用?

=== UPDATE ===

所以我创建了一个小样本脚本,看看我是否可以重现这个问题。这是:

$Block = {
    Import-Module WebAdministration
    $path = "IIS:\Sites\Application Services\2.5.12\OurProductServicesDirectory\"
    Test-Path -Path $path
    $parent = Split-Path -Path $path -Parent
    Write-Host Parent is $parent
}

$Session = New-PSSession -ComputerName "Our.WebServer.local"
Invoke-Command -Session $Session -ScriptBlock $Block

使用此脚本$ parent会获取一个值,但写入控制台的文本为:

True
Parent is IIS:Sites\Application Services

我希望它是:

True
Parent is IIS:\Sites\Application Services\2.5.12

因此,在我的简单示例脚本中,我确实得到了一个值,但这是错误的值;它返回祖父目录而不是父目录,并从 IIS:之后删除反斜杠。

我不确定为什么我在这个示例脚本中然后在我的主脚本中得到不同的结果,但两个结果似乎都是错误的。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

因为通过导入WebAdministration模块使IIS:限定符有效,我将假设Split-Path从未设计为使用IIS:限定符,这就是为什么它不处理它正常。

我发现的工作只是在使用Split-Path时从我的路径中排除 IIS:\ Sites \ 。所以我原来的例子将改为:

Remove-Item -Path "IIS:\Sites\$fullPath"
$parent = Split-Path -Path $fullPath -Parent

所以基本上我只是将 IIS:\ Sites \ 从我的所有路径中删除,然后在需要时显式添加它,例如在调用Remove-Item,Test-Path,Get-ChildItems时,这不是最好的解决方案,但它确实有效。