System. Net .NetworkCredential не может пройти аутентификацию для получения файла на Windows - PullRequest
0 голосов
/ 09 мая 2020

Позвольте мне объяснить свою ситуацию: у меня работает 2 сервера Windows Server 2019, и на обоих из них установлен IIS v10.

  • server1 - IP 192.168.1.54
  • server2 - IP 192.168.1.55

оба сервера являются частью рабочей группы.

На Server2 есть несколько веб-сайтов, которые работают на iis и имеют некоторую картинку, которую server1 должен прочитать.

Изображение папки на разрешении Server2 - все под контролем.

И я запускаю сценарий в PowerShell на Server1 следующим образом:

$path = "D:\share_local\test.jpg"
$url = "\\192.168.1.55\share_object\test.jpg"
$username = "192.168.1.55\Administrator"
$password = "P@ssw0rdshare"
$cli_web = new-object System.Net.WebClient
$cli_web.UseDefaultCredentials = $False
$cli_web.Credentials = new-object System.Net.NetworkCredential($username, $password)
$cli_web.DownloadFile( $url, $path )
$data = $cli_web.DownloadString($url)

Я получаю сообщение об ошибке:

Исключение, вызывающее «DownloadFile» с аргументом (-ами) «2»: «Имя пользователя или пароль неверны».
В строке: 9 символов: 1
+ $ cli_web.DownloadFile ($ url, $ path)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: WebException

Исключение, вызывающее «DownloadString» с аргументами «1»: «Имя пользователя или пароль неверны. * 102 8 * "
В строке: 10 символов: 1
+ $ data = $ data.DownloadString ($ url)
+ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: WebException

Я очень уверен, что Пользователь и пароль верны, но все равно отображаются неверные. и я пишу сценарий python, чтобы получить файл для подтверждения того, что пользователь и пароль верны, и он работает нормально, код ниже.

from io import BytesIO
import tempfile
from smb.SMBConnection import SMBConnection

userID = 'Administrator'
password = 'P@ssw0rdshare'
client_machine_name = 'localpcname'

server_name = 'servername'
server_ip = '192.168.1.55'

domain_name = 'domainname'

conn = SMBConnection(userID, password, client_machine_name, server_name, domain=domain_name, use_ntlm_v2=True,
                     is_direct_tcp=True)

conn.connect(server_ip, 445)

shares = conn.listShares()

attr = conn.getAttributes('share_object', 'test.jpg')
file_obj = BytesIO()
file_attributes, filesize = conn.retrieveFile('share_object', 'test.jpg', file_obj)
with open("test.jpg", "wb") as outfile:
    # Copy the BytesIO stream to the output file
    outfile.write(file_obj.getbuffer())
print ("download finished")
conn.close()

, однако я должен использовать System. Net .WebClient в. net для моего веб-сайта на iis.

Для обобщения у меня есть вопрос, почему

$cli_web.Credentials = new-object System.Net.NetworkCredential($username, $password)

не работает. Подскажите пожалуйста

Спасибо

1 Ответ

0 голосов
/ 11 мая 2020

Ваш фрагмент кода работает отлично, что-то не так со сценарием PS. См. Ссылку ниже.

$path = "test.JPG"
$url = "file:\\10.157.19.131\\share\"
$username = ".\administrator"
$password = "abcde12345!"
$cli_web = new-object System.Net.WebClient
$cli_web.UseDefaultCredentials = $false
#$cli_web.Credentials = new-object System.Net.NetworkCredential($username, $password)
#$cli_web.DownloadFile($url,$path)
Set-Content mytest.JPG -Value $cli_web.DownloadData($url+$path) -Encoding Byte 

О команде Powershell Set-Content.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-content?view=powershell-7
Вот некоторые связанные обсуждения.
Использование WebClient для доступа к локальным файлам
Записать байты в файл изначально в PowerShell

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...