使用 powershell 在服务器上保存文件

Posted

技术标签:

【中文标题】使用 powershell 在服务器上保存文件【英文标题】:Save file on server using powershell 【发布时间】:2020-09-12 07:45:08 【问题描述】:

我正在尝试在 C# 中创建 xml 文件,并使用 powershell 将新创建的文件保存在本地机器中。在本地创建新文件,但不保存内容。

我在 C# 中创建简单的 xml 文件,如下所示

XDocument doc = new XDocument(new XElement("body",
                                       new XElement("level1",
                                           new XElement("level2", "text"),
                                           new XElement("level2", "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 变量中)? (我觉得我错了,但我不知道该怎么做) 有没有更好的方法来做到这一点?(最佳做法)

【问题讨论】:

【参考方案1】:

    由于您将命名空间作为输出,因此该文档看起来可以很好地进入 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 命名空间,可以在两种语言中访问。除非有必要的原因,否则将所有这些内容只用一种语言保存可能会更容易。

【讨论】:

以上是关于使用 powershell 在服务器上保存文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 保存日志文件?

如何使用 powershell 设置文件的保存位置?

如何使用 PowerShell 或 C# 将网页保存到 HTML 文件中?

PowerShell Get-Service 查看运行状态的服务并将信息保存成txt文件

Powershell Excel 自动化按日期保存工作簿

如何在不大幅增加其大小的情况下在 PowerShell 中保存文本文件?