使用Powershell将文件保存在服务器上

问题描述

我正在尝试在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文件。

问题:-

  1. 如何将xml文件作为参数传递给powershell?(我所做的对吗?)
  2. 如何在$ txt中获取该文件(在powershell变量中)? (我想我在这里错了,但是我不确定该怎么做)
  3. 还有更好的方法吗?(最佳做法)

解决方法

  1. 由于您将命名空间作为输出,因此看起来该文档使它对Powershell正常。

  2. 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

  3. 这里没有详细说明为什么要开始使用C#然后切换到Powershell,但是两者紧密相连,System.Xml.XmlDocument是.Net命名空间,可以使用两种语言进行访问。除非有必要的原因,否则将所有这些内容仅保留一种语言可能会更容易。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...