问题描述
我正在尝试在C#中创建xml文件,并使用powershell将新创建的文件保存在本地计算机中。在本地创建了新文件,但未保存内容。
我正在C#中创建简单的xml文件,如下所示
XDocument doc = new XDocument(new XElement("body",new XElement("level1",new XElement("level2","text"),"other text"))));
并且我将“ doc”作为参数传递给powershell脚本并按如下方式调用powershell
Dictionary<string,XDocument> parameters = new Dictionary<string,XDocument>() { { "VMConfigFile",doc } };
powershell.AddCommand("PowershellFunc").AddParameters(parameters);
Collection<PSObject> results = powershell.Invoke();
Collection<ErrorRecord> errors = powershell.Streams.Error.ReadAll();
powershell功能为
function PowershellFunc
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true,Position=0,HelpMessage='Please Provide Config File')]
[ValidateNotNullOrEmpty()]
[xml]$VMConfigFile
)
try
{
$txt = $VMConfigFile
$Session = New-PSSession 127.0.0.1
Invoke-Command -Session $Session -ScriptBlock { Param($Txt) New-Item -Path c:\test\newFile.xml -Value $txt } -ArgumentList $txt
#Get-PSSession | Remove-PSSession
Write-Output "`file save successfully."
}
catch
{
Throw $_.exception.message
}
}
文件是在脚本运行后创建的,但仅包含名称空间(“ System.Xml.XmlDocument”),而不包含文件内容。
我也试图找出与我的问题有关的问题,但是大多数问题都属于从给定路径读取的xml文件。
问题:-
- 如何将xml文件作为参数传递给powershell?(我所做的对吗?)
- 如何在$ txt中获取该文件(在powershell变量中)? (我想我在这里错了,但是我不确定该怎么做)
- 还有更好的方法吗?(最佳做法)
解决方法
-
由于您将命名空间作为输出,因此看起来该文档使它对Powershell正常。
-
New-Item仅调用变量的ToString方法并将其粘贴到文件中。对于Powershell中的许多对象,这只是对象的类型或名称空间。只有非常简单的对象才能实际输出您期望的方式。您应该在XMLDocument类型中使用
.Save()
方法来正确地导出它。Export-Clixml
也是一个选项。XMLDocument
.Save()
:https://docs.microsoft.com/en-us/dotnet/api/system.xml.xmldocument.save?view=netcore-3.1#System_Xml_XmlDocument_Save_System_String _Export-Clixml文档:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/export-clixml?view=powershell-7
-
这里没有详细说明为什么要开始使用C#然后切换到Powershell,但是两者紧密相连,
System.Xml.XmlDocument
是.Net命名空间,可以使用两种语言进行访问。除非有必要的原因,否则将所有这些内容仅保留一种语言可能会更容易。