如何在远程主机上创建XML文件?

时间:2015-07-05 14:57:20

标签: xml powershell

脚本应连接到另一台服务器并使用以下内容创建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: 我用Google搜索,发现我可以这样使用。 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

1 个答案:

答案 0 :(得分:0)

默认情况下,Windows主机通过隐藏共享为管理员提供对所有驱动器的根文件夹的访问权限。所谓的管理共享的名称由驱动器号后跟$(隐藏共享)组成。驱动器C:在主机10.11.12.124上的管理共享的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