使用 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 在服务器上保存文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PowerShell 或 C# 将网页保存到 HTML 文件中?