2013-10-23 15 views
1

我正在使用PowerShell v3.0和IIS Administration Cmdlets來添加和從我的IIS 7實例中刪除網站。我使用導入模塊Web管理以確保IIS:驅動器可用,並且我可以使用Remove-Item通過IIS:驅動器刪除文件。由於某些原因,儘管當我使用下面的代碼時,Split-Path總是返回一個空字符串,即使Remove-Item工作正常。PowerShell拆分路徑無法與IIS正常工作:驅動器限定符

$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 

所以我希望$家長包含:

IIS:\Sites\Application Services\2.5.12 

但是$父母總是空的。我也嘗試使用$ iisPath =「IIS:\ Sites \ $ fullPath」而不是Join-Path來創建$ iisPath,但仍得到相同的結果。

任何想法爲什麼Split-Path在使用IIS:驅動器時似乎不工作,或者如何解決它?

=== 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 

使用這個腳本$父也得到一個值,但寫入控制檯文字是:

True 
Parent is IIS:Sites\Application Services 

時,我希望它是:

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

所以在我的簡單示例腳本中,我確實得到了一個值,但它是錯誤的值;它將返回祖父目錄而不是父目錄,並且它會從IIS:後刪除反斜槓。

我不知道爲什麼我在這個示例腳本中得到不同的結果,然後在我的主腳本中,但是這兩個結果似乎都是錯誤的。任何建議表示讚賞。

回答

0

因此,通過導入WebAdministration模塊使IIS:限定符生效,我將假定Split-Path從未設計爲使用IIS:限定符,這就是爲什麼它無法處理它正確。

我發現的解決方法僅僅是在使用拆分路徑時從我的路徑中排除IIS:\ Sites \。所以,我原來的例子將改變爲:

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

所以基本上我只是離開IIS:\網站\掉我所有的路徑,然後在需要時明確添加,如調用時刪除,項目,測試-Path,Get-ChildItems等等。這不是最好的解決方案,但它起作用。