我正在使用 PowerShell v3.0 和IIS 管理 Cmdlet从我的 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: 驱动器时拆分路径似乎不起作用,或者如何修复它?
===更新===
所以我创建了一个很小的示例脚本来看看我是否可以重现这个问题。这里是:
$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:之后删除反斜杠。
我不确定为什么我在这个示例脚本中得到不同的结果,然后在我的主脚本中得到不同的结果,但两个结果似乎都是错误的。任何建议表示赞赏。