我正在使用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:之后删除反斜杠。
我不确定为什么我在这个示例脚本中然后在我的主脚本中得到不同的结果,但两个结果似乎都是错误的。任何建议都表示赞赏。
答案 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时,这不是最好的解决方案,但它确实有效。