簡體   English   中英

PowerShell從遠程服務器PathInfo加載XML; 無法保存

[英]PowerShell load XML from remote server PathInfo; Can't save

我有一個小的腳本來處理一些XML。 這個想法很簡單:

  1. 通過Get-Content和[xml]加載XML
  2. 處理內存XmlDocument
  3. 保存XML

腳本開始是這樣的:

$fileName = Resolve-Path (Join-Path $targetDir $xmlFile.FileName)
[xml]$xdoc = Get-Content $fileName
...
$xdoc.Save($fileName);

但是,Save(...)失敗,顯示“不支持給定路徑的格式”。 我添加的一些診斷信息顯示該路徑如下所示:

Microsoft.PowerShell.Core\FileSystem::\\remoteserver\sharedfolder\test.xml

據我了解,這是路徑的PowerShell變體...實際上是PathInfo(或PathInfo的.ToString()輸出)。

當我使用本地路徑時,Save(...)工作正常。 它只中斷一條遠程路徑。

加載XML並不是問題,因為我們使用的是了解PowerShell路徑的本機PowerShell cmdlet Get-Context。 但是,當調用Save(...)時,我們實際上是在XmlDocument類上調用.NET方法,並且它無法理解PowerShell路徑並引發異常。

是否沒有簡潔,對稱的PowerShell手段來編寫XML文件?

Resolve-Path返回一個PathInfo ,但是Save()方法需要一個string類型。 當您使用PathInfo作為Save()的輸入時,它將對象轉換為字符串。 如您PathInfotoString()返回包含PSProvider詳細信息的完整“ PowerShell路徑”,這與“常規” .Net方法不兼容。

您可以使用PathInfo提供的ProviderPath屬性來獲取“常規”路徑。

或者,您可以重寫代碼以使用Get-Item獲得具有FullName -property的更常用的FileInfo -object。

使用Resolve-Path示例:

$fileName = Resolve-Path (Join-Path $targetDir $xmlFile.FileName)
[xml]$xdoc = Get-Content $fileName
...
$xdoc.Save($fileName.ProviderPath);

使用Get-Item示例:

$file = Get-Item (Join-Path $targetDir $xmlFile.FileName)
[xml]$xdoc = Get-Content $file
...
$xdoc.Save($file.FullName);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM