方法调用失败,因为[System.String]不包含名为“ SelectNodes”的方法

时间:2018-06-25 14:52:44

标签: powershell azure azure-powershell

我有一个要针对Azure订阅运行的脚本。该脚本获取已发布的配置文件设置,例如用户名,密码和url,以通过FTP将文件上传到该目录。我直接从Microsoft文档中获取了语法,概述了具体操作方法。请参见以下链接,以将XML与空输出文件结合使用:Msft.Doc

不幸的是,我收到一条错误消息:

  

方法调用失败,因为[System.String]不包含名为'SelectNodes'的方法。

我不确定为什么会这样。谢谢!

$appdirectory="<app directory>"
$webappname="<webapp name>" ##"mywebapp$(Get-Random)"
$location="East US"
$ResourceGroupName="<resource group name>"

# Get publishing profile for the web app
$xml = (Get-AzureRmWebAppPublishingProfile -Name $webappname `
-ResourceGroupName $ResourceGroupName `
-OutputFile null)

# Extracts connection information from publishing profile
$username = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@userName").value
$password = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@userPWD").value
$url = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@publishUrl").value


#ftp test 2
$request = [Net.WebRequest]::Create("$url")
$request.Credentials = New-Object System.Net.NetworkCredential("$username", "$password")
$request.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile 

# make sure to create the path or change the URL to file. 
$fileStream = [System.IO.File]::OpenRead("C:\tmp\test.txt")
$ftpStream = $request.GetRequestStream()

$buffer = New-Object Byte[] 10240
while (($read = $fileStream.Read($buffer, 0, $buffer.Length)) -gt 0)
{
    $ftpStream.Write($buffer, 0, $read)
    $pct = ($fileStream.Position / $fileStream.Length)
    Write-Progress `
        -Activity "Uploading" -Status ("{0:P0} complete:" -f $pct) `
        -PercentComplete ($pct * 100)
}

$fileStream.CopyTo($ftpStream)

$ftpStream.Dispose()
$fileStream.Dispose()

我知道有一个类似的问题,但它与我按照Microsoft文档给出的示例(在我的情况下输出文件为null)中的示例略有不同。

1 个答案:

答案 0 :(得分:3)

我找不到支持此目的的官方文档,但答案是from a related question。错误是正确的。您正在处理类似xml的字符串。如果确实是xml格式的字符串,则需要先将该字符串显式转换为xml。

$xml = [xml](Get-AzureRmWebAppPublishingProfile -Name $webappname `
-ResourceGroupName $ResourceGroupName `
-OutputFile null)

注意:使用该cmdlet的大多数示例都使用真实文件名,例如test.xml。但是,在这种情况下null可能是字符串null,因此它可能起作用。根据{{​​3}}

-outputfile被列为可选