Ошибка вызова метода, поскольку [System.String] не содержит метод с именем «SelectNodes» - PullRequest
0 голосов
/ 25 июня 2018

У меня есть скрипт, который я пытаюсь запустить для подписок 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, в котором выходной файл равен нулю в моем случае.

1 Ответ

0 голосов
/ 25 июня 2018

Не могу найти официальную документацию, подтверждающую это, но ответ приходит из соответствующего вопроса . Ошибка правильная. Вы рассматриваете строку как XML. Сначала вам нужно явно привести эту строку к xml, если это действительно строка в формате xml.

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

Примечание. В большинстве примеров использования этого командлета используется реальное имя файла, например, test.xml. Однако в этом случае, вероятно, null - это строка null, так что, вероятно, это работает. -outputfile указан как необязательный в любом случае в соответствии с docs.microsoft.com

...