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

PowerShell拆分路径无法与IIS:驱动器限定符一起正常工作,iis,powershell,path,split,Iis,Powershell,Path,Split,我正在使用PowerShell v3.0和从IIS 7实例中添加和删除网站。我使用导入模块WebAdministration来确保IIS:驱动器可用,并且我可以使用Remove Item通过IIS:驱动器删除文件。但由于某种原因,当我使用下面的代码拆分路径时,它总是返回一个空字符串,即使Remove项工作正常 $iisPath = Join-Path "IIS:\Sites" $fullPath Remove-Item -Path $iisPath $parent = Split-Path -P

我正在使用PowerShell v3.0和从IIS 7实例中添加和删除网站。我使用导入模块WebAdministration来确保IIS:驱动器可用,并且我可以使用Remove Item通过IIS:驱动器删除文件。但由于某种原因,当我使用下面的代码拆分路径时,它总是返回一个空字符串,即使Remove项工作正常

$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”创建$iisPath,而不是使用Join Path,但仍然得到相同的结果

你知道为什么使用IIS:drive时splitpath似乎不起作用,或者如何修复它吗

==更新===

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

$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:后删除反斜杠


我不确定为什么在这个示例脚本中得到的结果与在主脚本中得到的结果不同,但这两个结果似乎都是错误的。非常感谢您的建议。

因此,由于IIS:qualifier是通过导入WebAdministration模块而生效的,因此我假设Split Path从未被设计用于IIS:qualifier,这就是它无法正确处理它的原因

我发现的解决方法只是在使用拆分路径时将IIS:\Sites\从我的路径中排除。因此,我最初的示例将更改为:

Remove-Item -Path "IIS:\Sites\$fullPath"
$parent = Split-Path -Path $fullPath -Parent
因此,基本上我只需将IIS:\Sites\从我的所有路径中删除,然后在需要时显式添加它,例如在调用Remove Item、Test Path、Get ChildItems等时。这不是最好的解决方案,但它可以工作