【问题标题】:How to create an XML file on a remote host?如何在远程主机上创建 XML 文件?
【发布时间】:2015-07-06 03:11:10
【问题描述】:

脚本应该连接到另一个服务器并创建一个包含以下内容的 XML 文件。

<?xml version='1.0'?>
<action>
  <type>UPDATE_JOB</type>
  <attribute name="job_id" value="331" />
    <attribute name="variables">
        <map>
            <entry name="cc_WaitApprove_Continue" value="true"/>
            <entry name="cc_Approved" value="false"/>
        </map>
    </attribute>
</action>

更新 1: 我能够使用以下代码在同一服务器中创建 XML 文件,但我不确定如何编写代码以连接到另一台服务器并在那里创建 XML 文件:

Param( [string] $jobid, [string] $path)
$Location = $path
#"C:\Users\sks"
$x = @"
<?xml version='1.0'?>
<action>
  <type>UPDATE_JOB</type>
  <attribute name="job_id" value="$jobid" />
    <attribute name="variables">
        <map>
            <entry name="cc_WaitApprove_Continue" value="true"/>
            <entry name="cc_Approved" value="false"/>
        </map>
    </attribute>
</action>
"@
New-Item -Path $Location -Name "testing.xml" -ItemType File -value $x

更新 2: 我用谷歌搜索,发现我可以这样使用。 C$ 是什么意思?是C:\吗?

$uncServer = "\\10.11.12.124"
$uncFullPath = "$uncServer\C$\backup\folder"

$username = "anton"
$password = "p@ssw0rd"

net use $uncServer $password /USER:$username
New-Item -Path $uncFullPath -Name "testing.xml" -ItemType File -value $x

【问题讨论】:

  • @santoshsago 你是什么意思?您可以使用.xml 扩展名保存它
  • 我根本不是 PowerShell 程序员,因此我很难想出代码来完成这项工作。任务是我需要在服务器中运行一个 PS 脚本,它将连接到另一台服务器并创建一个 XML 文件。这个 XML 文件将被另一个工具用来做一些在节点内定义的东西。
  • 看看this的答案。
  • @JPBlanc 感谢您的回复。我已经更新了这个问题。请检查
  • C$ 是管理员共享,它确实代表 C 驱动器,但您需要该计算机上的管理员权限才能访问它。

标签: xml powershell


【解决方案1】:

默认情况下,Windows 主机为管理员提供通过隐藏共享访问所有驱动器根文件夹的权限。所谓的管理共享的名称由驱动器号和$ 组成(使共享隐藏)。主机 10.11.12.124 上驱动器 C: 的管理共享的 UNC 路径为

\\10.11.12.124\C$

要访问管理共享,用户必须在远程主机上具有管理权限。

要使用显式凭据连接管理共享,您可以使用net.exe

$username = '...'
$password = '...'
$path     = '\\10.11.12.124\C$'

& net use R: $path $password /user:$username

或(更多 PoSh)使用 New-PSDrive cmdlet:

$username = '...'
$password = '...'
$path     = '\\10.11.12.124\C$'

$secpw = ConvertTo-SecureString $password -AsPlainText -Force
$cred  = New-Object Management.Automation.PSCredential ($username, $secpw)

New-PSDrive -Name R -PSProvider FileSystem -Root $path -Credential $cred

如果您想避免将密码存储在脚本中,您可以让脚本从文件中读取密码,或者(以交互方式运行脚本时)您可以使用Get-Credential 提示输入凭据。

如果您的用户没有管理员权限(或者您不想使用具有管理员权限的帐户进行操作,这通常是个好主意),您需要使用远程主机上现有的常规共享,或创建一个:

net share backup=C:\backup\folder /grant:anton,full

在 Windows 8/Server 2012 上,您还可以为此使用 New-SmbShare cmdlet:

New-SmbShare –Name backup –Path C:\backup\folder -FullAccess anton

另一种完全不同的方法是将您的 XML 创建代码放在 scriptblock 中,然后通过 Invoke-Command 在远程主机上运行:

$sb = {
$xml = @"
<?xml version='1.0'?>
<action>
  <type>UPDATE_JOB</type>
  <attribute name="job_id" value="$jobid" />
    <attribute name="variables">
        <map>
            <entry name="cc_WaitApprove_Continue" value="true"/>
            <entry name="cc_Approved" value="false"/>
        </map>
    </attribute>
</action>
"@
New-Item -Path $args[0] -Name 'testing.xml' -ItemType File -value $xml
}

$server = '10.11.12.124'
$path   = 'C:\backup\folder'

$username = '...'
$password = '...'

$secpw = ConvertTo-SecureString $password -AsPlainText -Force
$cred  = New-Object Management.Automation.PSCredential ($username, $secpw)

Invoke-Command -Computer $server -Scriptblock $sb -ArgumentList $path -Credential $cred

请注意,要使其正常工作,您必须启用 PSRemoting

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多